preg_quote('<>')
これらの文字を正規表現でエスケープする必要があるかどうかを確認するために実行したところ、驚いたことに、それらはエスケープされて戻ってきました: \<\>
.
これらの文字をエスケープする必要があるのはなぜですか? 正規表現でのそれらの意味は何ですか?
preg_quote('<>')
これらの文字を正規表現でエスケープする必要があるかどうかを確認するために実行したところ、驚いたことに、それらはエスケープされて戻ってきました: \<\>
.
これらの文字をエスケープする必要があるのはなぜですか? 正規表現でのそれらの意味は何ですか?
<
後読み(が前に付いていない(?<!foo)bar
一致)を定義するために使用する場合に重要です。bar
foo
<
とは両方とも>
、次のようにサブパターンに名前を付けるために使用されます。
preg_match("/(?<area>\d{3})-(?<sub>\d{3})-(?<num>\d{4})/",$number,$m);
// now elements of the US phone number are in $m['area'], $m['sub'] and $m['num']
そのため、他の記号と組み合わせて使用すると意味を持つ可能性があるため、エスケープされます。
ただし、サブパターンの特定の場所以外では意味がないことに注意してください。そのため、手動でエスケープする場合は、ほとんどの場合エスケープする必要はありません。
さらに拡張するには:
ドキュメントには、エスケープされる文字の完全なリストがあります。ここでは、それらの意味とともにリストします。
.
改行以外の任意の 1 文字に一致 (s
修飾子が設定されていない場合)\
次の文字をエスケープするか、エスケープ シーケンスを開始します+
先行する文字、クラス、またはサブパターンの 1 つ以上に一致*
先行する文字、クラス、またはサブパターンの 0 個以上に一致?
前の項目をオプションにします。また、「キャプチャしない」( (?:foo)
)、「先読み」((?=foo)
および(?!foo)
)、「後読み」((?<=foo)
および) などの特別な動作を定義するサブパターンで使用され(?<!foo)
、その他にも多くの用途があります。[
文字クラスを]
定義します。一致する可能性のある文字のセット。他のほとんどのシンボルは、文字クラス内では意味を持ちません。^
文字列の先頭と$
末尾をそれぞれ一致させます。修飾子が存在する場合、m
個々の行の開始と終了にも一致します。(
サブパターンを)
定義し、キャプチャのために単独で使用するか、?
特別な動作のために使用します。in などの量指定子を適用して、\d{1,3}(?:,\d{3})*
1000 区切りの数字に一致させる場合にも役立ちます。{
前の項目を}
手動で定量化します。コンマで区切られた 1 つまたは 2 つの数字を取ります。たとえば、{3}
正確に 3 回{,3}
一致する、0 回から 3 回一致する、3 回{3,}
以上一致する、3 回{3,8}
から 8 回一致する、などがあります。=
先読みアサーションで使用:にfoo(?=bar)
一致しますfoo
が、後に が続く場合のみですbar
。!
否定的なルックアラウンド アサーションで使用されfoo(?!bar)
ます。foo
bar
<
>
この質問の件名は、回答の冒頭を参照してください。|
可能性のリストを指定する代替。文字クラスのようなものですが、単一の文字ではなくパターン全体を対象としています。foo|bar
"foo" または "bar" に一致します。サブパターンでの特別な動作と見なされることもあります:(?|foo(bar)|bar(foo))
括弧内のビットがサブパターン 1 になるようにします (そうでない場合、bar
一致した場合は 1 に、一致したfoo
場合は 2 に、一致しなかったものは空になります)。:
サブパターンを非キャプチャにするためにサブパターンで使用されます。基本的に、サブパターンは単に「文字のグループ」になり、通常は数量化されます。(?:foo)
"foo" に一致しますが、キャプチャしません。-
文字クラス内の文字の範囲を定義します。1 つの外では意味がありません。