/} /有时不匹配}

时间:2012-08-09 17:36:13

标签: php regex

正则表达式/} /有时匹配},有时不会。

PHP中是否有任何已知错误? 我使用的是PHP 5.40

我假设}不需要为了匹配而进行转义。 虽然/\}/总是匹配},但这种行为似乎是错误的。

link还说明了仅需要转义的11个元字符。

有11个具有特殊含义的字符:开口方括号[,反斜杠\,插入符号^,美元符号$,句点或点。,竖线或竖线符号|,问号?,星号或星号*,加号+,开口圆括号(和结束圆括号)。这些特殊字符通常称为“元字符”。

示例-PHP documentation的元字符,但不需要转义,/-/在PHP中正常工作,为什么不}?< / p>

$subject = 'find me}';
$pattern = '/}/';
$isMatch = preg_match($pattern,$subject,$matches);

echo 'Match Found = ' . $isMatch . '<br />';
print_r($matches);

有时我会跟随

Match Found = 0
Array ( ) 

有时我会跟随

Match Found = 1
Array ( [0] => } ) 

4 个答案:

答案 0 :(得分:3)

http://php.net/manual/en/function.preg-quote.php根据{和}是正则表达式字符

答案 1 :(得分:1)

不知道为什么/}/有时会工作而不是其他人 - 我知道在Java中它("}")永远不会工作,除非它被转义,在.Net中我从未拥有逃避它,但它会理解我是否 - 这一切都取决于正则表达式引擎的内部工作原理,但我很确定逃避它几乎可以在所有口味或正则表达式中运行 - 唯一一个会打破我的知道是POSIX BRE,如果你卡住使用:-P,但那是因为所有元字符必须被转义IIRC

答案 2 :(得分:1)

某些字符必须转义,}是其中之一, - 另一方面不是以下是必须转义的字段列表http://php.net/manual/en/function.preg-quote.php

. \ + * ? ^ $ [ ] ( ) { } < > = ! | :

正如您所看到的,-不属于此列表,因此无需转义。

所以正确的代码是:

$subject = 'find me}';
$pattern = '/\}/';
$isMatch = preg_match($pattern,$subject,$matches);

echo 'Match Found = ' . $isMatch . '<br />';
print_r($matches);

希望这会有所帮助:)

答案 3 :(得分:0)

在PCRE中,}需要转义,它用于表示多个匹配项:

/x{4}/

它也可以用来表示范围:

/x{1,4}/