如何使用RegEx匹配方括号文字?

时间:2008-12-08 10:52:13

标签: php regex string

匹配方括号的正则表达式是什么?我在\\]中的模式中使用eregi_replace,但它似乎无法找到] ...

6 个答案:

答案 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中,您可以通过添加反斜杠来转义特殊字符; “\”意味着它会成为; “[” ...

虽然你通常在字符串文字中这样做,但你要么做这样的事情;

@"\["

或类似的东西;

"\\["