什么是匹配方括号的正则表达式?我在\\]
的模式中使用eregi_replace
,但它似乎无法找到]
...
\]
是正确的,但请注意PHP本身也有\
作为转义字符,因此您可能必须使用\\[
(或不同类型的字符串文字)。
完美无瑕:
<?php
$hay = "ab]cd";
echo eregi_replace("\]", "e", $hay);
?>
输出:
abecd
你不需要逃避它:如果被隔离,a]被视为常规字符。 使用eregi_replace和preg_replace测试。
[是另一头野兽,你必须逃脱它。对于两个正则表达式族,看起来单引号和双引号,单引号或双引号都由PHP处理相同。
也许你的问题在你的表达中的其他地方,你应该完整地给它。
有两种方法可以做到这一点:
/ [\]] /x;
/ \] /x;
虽然您可能认为后者是更好的选择,实际上我会考虑在更简单的正则表达式中使用它。我会考虑前者,更大的正则表达式更好的选择。考虑以下:
/ (\w*) ( [\d\]] ) /x;
/ (\w*) ( \d | \] ) /x;
在这个例子中,前者是我的首选解决方案。它可以更好地组合单独的实体,每个实体可以在给定位置匹配。根据实施情况,它也可能具有一些速度优势。
注意:这是Perl语法,部分是为了确保正确突出显示。
在PHP中,您可能需要在反斜杠上加倍。 "[\\]]"
和"\\]"
在.Net中,您可以通过添加反斜杠来转义特殊字符; “\”意味着它会成为; “[” ...
虽然你通常在字符串文字中这样做,但你要么必须做这样的事情;
@"\["
或类似的东西;
"\\["
你的问题可能来自于你使用eregi_replace,第一个参数用简单的引号括起来:
'\['
但是在double quotes中,它可以很好地依赖于上下文,因为它将changes the way the parameter传递给函数(简单的引号只传递字符串而没有任何解释,因此需要加倍到“\”字符)。
在这里,如果将"\["
解释为转义字符,则仍需要加倍“\”。
注意:根据您的评论,您可以尝试使用正则表达式
<\s*(?:br|p)\s*\/?\s*\>\s*\[
为了在[
or a <br>
之后发现<p>