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

问题描述 投票:16回答:6

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

php regex string
6个回答
27
投票

\]是正确的,但请注意PHP本身也有\作为转义字符,因此您可能必须使用\\[(或不同类型的字符串文字)。


6
投票

完美无瑕:

<?php
    $hay = "ab]cd";
    echo eregi_replace("\]", "e", $hay);
?>

输出:

abecd

3
投票

你不需要逃避它:如果被隔离,a]被视为常规字符。 使用eregi_replace和preg_replace测试。

[是另一头野兽,你必须逃脱它。对于两个正则表达式族,看起来单引号和双引号,单引号或双引号都由PHP处理相同。

也许你的问题在你的表达中的其他地方,你应该完整地给它。


3
投票

有两种方法可以做到这一点:

/ [\]] /x;

/  \]  /x;

虽然您可能认为后者是更好的选择,实际上我会考虑在更简单的正则表达式中使用它。我会考虑前者,更大的正则表达式更好的选择。考虑以下:

/ (\w*) (  [\d\]] ) /x;

/ (\w*) ( \d | \] ) /x;

在这个例子中,前者是我的首选解决方案。它可以更好地组合单独的实体,每个实体可以在给定位置匹配。根据实施情况,它也可能具有一些速度优势。

注意:这是Perl语法,部分是为了确保正确突出显示。 在PHP中,您可能需要在反斜杠上加倍。 "[\\]]""\\]"


0
投票

在.Net中,您可以通过添加反斜杠来转义特殊字符; “\”意味着它会成为; “[” ...

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

@"\["

或类似的东西;

"\\["

0
投票

你的问题可能来自于你使用eregi_replace,第一个参数用简单的引号括起来:

 '\['

但是在double quotes中,它可以很好地依赖于上下文,因为它将changes the way the parameter传递给函数(简单的引号只传递字符串而没有任何解释,因此需要加倍到“\”字符)。

在这里,如果将"\["解释为转义字符,则仍需要加倍“\”。

注意:根据您的评论,您可以尝试使用正则表达式

<\s*(?:br|p)\s*\/?\s*\>\s*\[

为了在[or a <br>之后发现<p>

© www.soinside.com 2019 - 2024. All rights reserved.