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