我有一个正则表达式:/(<br\s*/{0,1}>)*$/gi
。
这样做的目的是匹配可能格式错误的字符串末尾的未知数量的<br>
标记。除了break标记之外,该字符串不包含任何HTML。
这在Grant Skinner的测试工具(http://regexr.com?303ff)中运行良好,但在PHP中使用preg_replace
时失败。
以下内容返回一个空字符串,但我希望最后没有任何<br>
标记的原始字符串:
$string = 'Here is some text<br><br>And here is some more<br><br>and this is followed by a load of unnecessary breaks<Br><br/><br /><br /><br><br ><br><br>';
echo preg_replace('/(<br\s*/{0,1}>)*$/gi','',$string);
我做错了什么?
答案 0 :(得分:4)
你需要逃避正斜线;它会提前终止您的正则表达式,然后由于正则表达式选项区域中的意外字符而导致错误。除此之外,删除PHP中不存在的g
修饰符:
echo preg_replace('/(<br\s*\/?>)*$/i','',$string);
另一种选择是使用不同的分隔符(/
在处理html时是次优的):
echo preg_replace('#(<br\s*/?>)*$#i', '', $string);
旁注:您可以而且应该使用?
代替{0,1}