Beberapa cara lain yang layak ditambahkan ke buku trik RegEx :
Pertama, Anda bisa memadatkan RegEx Anda ke: /(<br\s*/?>)+/i
dan ganti dengan<br />
(tidak perlu membebani RegExP dengan lookaheads) dan Anda akan selalu berakhir dengan jeda baris XHMTL yang Anda pilih.
Cara lain untuk memodifikasi RegEx Anda sehingga tidak akan tersandung */
komentar ?>
akhir atau skrip akhir:
- Gunakan quantifiers posesif :
#(<br\s*+/?+>)+#i
- yang pada dasarnya berarti \s*+
jika Anda menemukan kecocokan spasi sebanyak yang ada dan simpan, dan karena /?+
jika Anda menemukan garis miring, pertahankan!
- Lampirkan
\s*
dan /*
dalam kelompok tangkap =>#(<br(\s*)(/?)>)+#i
Demo langsung: http://codepad.viper-7.com/YjqUbi
Dan karena kita bersandar pada perilaku posesif, RegEx tercepat yang juga mem-bypass masalah komentar adalah: menjelaskan demo#(<br\s*+/?+>)++#i
Adapun komentar dalam situasi sulit
Ketika Anda tidak dapat mengubah kode, atau sudah menggunakan komentar multiline dan:
1. Gunakan nowdoc :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
<<<'comment'
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
comment;
Kode langsung: http://codepad.viper-7.com/22uOtV
Catatan: nowdoc mirip dengan heredoc tetapi tidak mem-parsing konten dan harus memiliki pembatas awal yang dilampirkan dalam '
tanda kutip tunggal '
( perhatikan bahwa pembatas akhir tidak dapat diidentifikasi , harus diikuti oleh ;
dan baris baru ! )
2. Melompati kode dengan goto :
$string='Hello<br>World<br><br />World<br><br><br>Word!';
goto landing;
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
landing:
Contoh langsung: http://codepad.viper-7.com/UfqrIQ
3. Melompati kode dengan if(false)
atau if(0)
:
$string='Hello<br>World<br><br />World<br><br><br>Word!';
if(0){
$string = preg_replace('#(<br\s*/?>)+#i', '<br />', $string);
}
Uji: http://codepad.viper-7.com/wDg5H5