Kilka innych sposobów, które warto dodać do książki trików RegEx :
Najpierw możesz skompaktować wyrażenie regularne do: /(<br\s*/?>)+/i
i 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