Название может показаться странным, но я пытаюсь настроить этот preg_replace, который заботится о грязных писателях для текстового поля. Он должен:
Например:
Конечный результат всегда должен быть:
Мой дом, зеленый, хорош!
Есть ли уже построенное регулярное выражение, которое позаботится об этом?
Решение проверить решение FakeRainBrigand ниже!
Возможно, мне придется использовать это для моих собственных сайтов … хорошая идея!
<?php $text = 'My hooouse..., which is greeeeeen , is nice!!! ,And pretty too...'; $pats = array( '/([.!?]\s{2}),/', # Abc. ,Def '/\.+(,)/', # ......, '/(!)!+/', # abc!!!!!!!! '/\s+(,)/', # abc , def '/([a-zA-Z])\1\1/', # greeeeeeen '/,(?!\s)/'); $fixed = preg_replace($pats, '$1', $text); echo $fixed; echo "\n\n"; ?>
И «измененная» версия $ text: «Мой дом, зеленый, хорош! И довольно тоже».
UPDATE: вот версия, которая обрабатывает «abc, def» -> «abc, def».
<?php $text = 'My hooouse..., which is greeeeeen ,is nice!!! ,And pretty too...'; $pats = array( '/([.!?]\s{2}),/', # Abc. ,Def '/\.+(,)/', # ......, '/(!)!+/', # abc!!!!!!!! '/\s+(,)/', # abc , def '/([a-zA-Z])\1\1/'); # greeeeeeen $fixed = preg_replace($pats, '$1', $text); $really_fixed = preg_replace('/,(?!\s)/', ', ', $fixed); echo $really_fixed; echo "\n\n"; ?>
Я думаю, что это немного медленнее, поскольку это дополнительный вызов функции.
- $result = preg_replace('/!+/', '!', $subject); - $result = preg_replace('/\.*,/', ',', $subject); - $result = preg_replace('/\s+(?=,)/', '', $subject); - $result = preg_replace('/^,*|,*$/', '', $subject); - $result = preg_replace('/([az])\1+/i', '$1$1', $subject); - $result = preg_replace('/,(?!\s)/', ', ', $subject);
Один за другим, соответствующий вашим правилам 🙂