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