Ще кілька способів, які варто додати до книги фокусів RegEx :
По-перше, ви можете компактний ваш RegEx: /(<br\s*/?>)+/i
і замінити на <br />
(не потрібно обтяжувати RegExP lookaheads), і ви завжди будете в кінцевому підсумку з обраним вами розривом XHMTL.
Інші способи змінити ваш RegEx, щоб він не вимикав */
кінцевий коментар чи ?>
кінцевий сценарій:
- Використовуйте присвійні кількісні показники :
#(<br\s*+/?+>)+#i
- що в основному означає, \s*+
якщо ви знайшли пробіли у відповідності стільки, скільки є, і збережіть його, а /?+
якщо ви знайшли косу рису, збережіть її!
- Закрийте
\s*
і /*
в групах захоплення =>#(<br(\s*)(/?)>)+#i
Демонстраційні демонстрації: http://codepad.viper-7.com/YjqUbi
А оскільки ми нахилилися до нав'язливої поведінки, найшвидший RegEx, який також обходить проблему коментування: пояснив демо#(<br\s*+/?+>)++#i
Що стосується коментування в складних ситуаціях
Якщо ви не можете змінити код або вже використовували багаторядковий коментар і:
1. Використовуйте заразdoc :
$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. Перехід до коду за допомогою goto :
$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