Несколько других способов, которые стоит добавить в книгу трюков RegEx :
Сначала вы можете сжать свой RegEx до: /(<br\s*/?>)+/i
и заменить на<br />
(не нужно обременять RegExP заглядыванием в будущее), и у вас всегда будет выбранный разрыв строки XHMTL.
Другие способы изменить свой RegEx, чтобы он не отключал */
конечный комментарий или ?>
конечный скрипт:
- Используйте собственнические квантификаторы :
#(<br\s*+/?+>)+#i
- которые в основном означают, что \s*+
если вы обнаружили, что количество пробелов совпадает с тем количеством, которое существует, и сохраните его, и для/?+
если вы нашли слеш, сохраните его!
- Вложить
\s*
и /*
в группы захвата =>#(<br(\s*)(/?)>)+#i
Живые демонстрации: http://codepad.viper-7.com/YjqUbi
И так как мы опирались на собственническое поведение, самый быстрый RegEx, который также обходит проблему комментирования: поясненная демонстрация#(<br\s*+/?+>)++#i
Что касается комментирования в сложных ситуациях
Если вы не можете изменить код или уже использовали многострочный комментарий и:
1. Используйте nowdoc :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
<<<'comment'
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
comment;
Живой код: http://codepad.viper-7.com/22uOtV
Примечание: а nowdoc похож на Heredoc , но не анализирует содержание и должен иметь это начиная разделитель , заключенный в '
одинарные кавычки '
( примечание о том , что окончание разделитель не может быть idented , должно сопровождаться ;
и новой строки ! )
2. Перепрыгните код с помощью перехода :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
goto landing;
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
landing:
Живой пример: http://codepad.viper-7.com/UfqrIQ
3. Перепрыгните код с помощью if(false)
или if(0)
:
$string='Hello<br>World<br><br />World<br><br><br>Word!';
if(0){
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
}
Тест: http://codepad.viper-7.com/wDg5H5