值得添加到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