0

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

PHP中有任何已知的错误吗?我正在使用 PHP 5.40

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

链接还显示了 11 个只需要转义的元字符。

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

例如,根据PHP 文档-,它是一个元字符,但它不需要转义并且在 PHP 中可以正常工作,为什么不呢?/-/}

$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

4 回答 4

3

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

于 2012-08-09T17:42:14.237 回答
1

不知道为什么有时会/}/起作用,但有时却不起作用-我知道在 Java 中它的正则表达式引擎,但我很确定逃避它几乎适用于所有口味或正则表达式 - 我所知道的唯一会破坏的是POSIX BRE,如果你坚持使用它:-P,但那是因为所有元字符都必须转义 IIRC"}"

于 2012-08-09T17:41:37.920 回答
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);

希望这可以帮助 :)

于 2012-08-09T17:42:06.880 回答
0

在 PCRE 中,}需要转义,用于表示匹配的数量:

/x{4}/

它也可以用来表示一个范围:

/x{1,4}/
于 2012-08-09T17:38:18.387 回答