PHP正则表达式中的 | 运算符翻译为 "或"。

9

我正在使用 preg_replace 函数:

$pattern = '/<ul>/';
$replacement = "";
$string = "hello <ul> how are you doing </ul>";
echo preg_replace($pattern, $replacement, $string);

这将用""替换我的<ul>,但我想替换任何<ul></ul>,我不知道如何使用|(或)字符。

我尝试了这样的方式,但它没有正常工作:

$pattern = '/<ul>|</ul>/';
$replacement = "";
$string = "hello <ul> how are you doing </ul>";
echo preg_replace($pattern, $replacement, $string);

任何帮助都将不胜感激。
谢谢, Bryan

3
以下是您需要翻译的内容:给定一个HTML文件中的所有开放标签,如何使用正则表达式匹配非自包含标签(即不是以“/>”结尾的标签)?我知道这似乎是一个常见的问题,因为有很多stackoverflow上的答案,但是它们都没有考虑到所有情况。例如:<p>Hello, <br/>world!</p> 我想将其分成两个部分:
  • <p></p>
  • <br/>
对于第一部分,我可以使用以下正则表达式:<[^/>][^>]*>但是,如果我在标签内部使用类似于下面的JavaScript代码,则该正则表达式将失败:<script type="text/javascript"> var regex = /<[^/>][^>]*>/g; var matches = document.documentElement.innerHTML.match(regex); alert(matches.join('\n')); </script> 在这种情况下,它会将整个JavaScript块视为一个标签。有什么方法可以更好地解决这个问题吗?
- Ignacio Vazquez-Abrams
2个回答

20

您可能需要像这样转义/ ul中的斜杠:

$pattern = '/<ul>|<\/ul>/';

或者这样做,但不确定是否有效:

$pattern = '/<\/?ul>/';

(问号表示之前的字符可以出现零次或一次,该情况下为斜杠。)


5
另一个选项是使用不同的正则表达式分隔符:'~</?ul>~' - Alan Moore
1
</?ul> 是个好的解决方案,终于解决了我一直在处理的正则表达式错误。感谢你的提示! - Yohn

2

您需要转义反斜杠。

/<ul>|<\/ul>/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接