正则表达式/} /有时匹配},有时不会。
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] => } )
答案 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}/