值得添加到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
至于在棘手的情况下发表评论
当您无法更改代码或已经使用多行注释并且:
$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类似于定界符,但它不解析的内容,必须有它的起始定界符括在'单引号'(请注意,结束符不能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