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ではエスケープしないと()は機能しないことを知っている、.Netではエスケープする必要はなかったが、私がそうするかどうかは理解する-それはすべて内部の仕組みに依存する正規表現エンジンの、しかし私はそれをエスケープすることはほとんどすべてのフレーバーまたは正規表現で機能すると確信しています-あなたがそれを使用して立ち往生している場合、私が知っている唯一の壊れるものはPOSIXBREです:-P、しかしそれはすべてのメタ文字をエスケープする必要があるためIIRC

于 2012-08-09T17:41:37.920 に答える
1

特定の文字をエスケープする必要があります。}はの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 に答える