Kilka innych sposobów, które warto dodać do książki trików RegEx :
Najpierw możesz skompaktować wyrażenie regularne do: /(<br\s*/?>)+/ii zamienić na<br /> wyrażenie regularne (nie ma potrzeby obciążania wyrażenia regularnego z wyprzedzeniem), a zawsze otrzymasz wybrany podział wiersza XHMTL.
Inne sposoby modyfikowania wyrażenia regularnego, aby nie wyłączało */komentarza lub ?>skryptu:
- Użyj kwantyfikatorów dzierżawczych :
#(<br\s*+/?+>)+#i- co w zasadzie oznacza, że \s*+jeśli znalazłeś tyle białych znaków, ile jest i zachowasz je, a /?+jeśli znalazłeś ukośnik, zachowaj go!
- Zamknięcie
\s*i /*w grupach przechwytywania =>#(<br(\s*)(/?)>)+#i
Dema na żywo: http://codepad.viper-7.com/YjqUbi
A ponieważ oparliśmy się na zachowaniu zaborczym, najszybszym wyrażeniem regularnym, które również omija problem komentowania, jest: wyjaśnione demo#(<br\s*+/?+>)++#i
Co do komentowania w trudnych sytuacjach
Kiedy nie możesz zmienić kodu lub użyłeś już komentarza wielowierszowego i:
1. Skorzystaj z nowdoc :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
<<<'comment'
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
comment;
Kod na żywo: http://codepad.viper-7.com/22uOtV
Uwaga: nowdoc jest podobny do heredoc, ale nie analizuje treści i musi mieć swój początkowy ogranicznik ujęty w 'pojedyncze cudzysłowy '( pamiętaj, że ogranicznika końcowego nie można zidentyfikować , musi po nim następować ;i nowa linia ! )
2. Przeskocz kod za pomocą goto :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
goto landing;
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
landing:
Przykład na żywo: http://codepad.viper-7.com/UfqrIQ
3. Przeskocz nad kodem za pomocą if(false)lub if(0):
$string='Hello<br>World<br><br />World<br><br><br>Word!';
if(0){
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
}
Test: http://codepad.viper-7.com/wDg5H5