8

私は次のコードを書きました(はい、動作します)。phpマニュアルでは「特殊」文字と見なされるため、パターン内の「<」および「>」文字をエスケープする必要がないのはなぜか疑問に思いました。

http://www.php.net/manual/en/function.preg-quote.php

var_dump(preg_match('/<[A-Za-z][A-Za-z0-9]*>/', "<html>", $matches));

echo "<pre>";
var_dump(htmlentities($matches[0]));
echo "</pre>";

出力:

int(1) 
string(12) "<html>"
4

2 に答える 2

18

このページにリストされている文字のみを、PHP正規表現の一致/置換でエスケープする必要があります。

<とは区切り文字>として機能できますが、 (スラッシュ)がすでに区切り文字として機能しているため、この例ではエスケープする必要はありません。/

問題のリンクを参照する

このpreg_quote()関数は、パターンに挿入するために文字列をエスケープするために使用でき、そのオプションの2番目のパラメーターを使用して、エスケープする区切り文字を指定できます。

于 2013-03-10T00:26:40.767 に答える
3

<メタ文字で>はないのがほとんどのコンテキストです。

ただし、次の目的で使用されます。

  • 名前付きキャプチャグループ(?P<name>)
  • アサーションの後ろを見る(?<=...)

だから、preg_quoteそれを安全にプレイして逃げるのはそのためです。エスケープ(?て十分なので、間違いなく冗長です。しかし、それも害はありません。

于 2013-03-10T00:25:24.563 に答える