PHP 7.1.12 Released

メタ文字

正規表現の強力さは、パターン中に選択肢や繰り返しを記述できることに あります。選択肢や繰り返しは、メタ文字 (meta-character) を使ってパターン中に記述します。メタ文字は、 その文字自体を表わさず、代わって特別な解釈が行われます。

メタ文字には、2 種類あります。ひとつは、角カッコ内を除き、 パターン中のどこででも使用できる文字です。もうひとつは、 角カッコで括られた中でだけ使用できる文字です。

前者の角カッコ外で使用できるメタ文字には、次のものがあります。

角カッコ外で使用できるメタ文字
メタ文字説明
\多目的に使う一般的なエスケープ文字
^検索対象(複数行モードでは行)の始まりを言明
$検索対象の終わりあるいは終端の改行文字の前(複数行モードでは行の終わり)を言明
.改行を除くすべての文字にマッチ(デフォルト時)
[文字クラス定義の開始
]文字クラス定義の終了
|選択枝の開始
(サブパターンの開始
)サブパターンの終了
?( の意味を拡張/0 または 1 回マッチ/なるべく少ない回数だけマッチ (繰り返し を参照)
*0 回以上の繰り返し
+1 回以上の繰り返し
{最小/最大を指定する量指定子の開始
}最小/最大を指定する量指定子の終了
パターン中の角カッコで括まれた部分を「文字クラス」と言います。 文字クラスで使えるメタ文字は、次のものだけです。
角カッコ内のメタ文字 (文字クラス)
Meta-characterDescription
\一般的なエスケープ文字
^クラスの否定。ただし、文字クラスの最初の文字に用いた場合のみ
-文字の範囲の指定
以降のセクションで、各メタ文字の使用法の説明を行います。

add a note add a note

User Contributed Notes 2 notes

up
1
Kurt Wei
1 year ago
disturbing usage of "any character" for multi-lines...

remark:
'.' (all characters) just does NOT include on single character the newline (\n) by default,
while \n is included in all other matching searches (e.g. \s).
Funny enough, the "carriage return" (\r) is included, when using '.'

You have to write "(.|\\n)" instead of a single dot, with disadvantages in using complex matching-results,

or simple use the "s" modificator to bring dot to accept the newline.

$subject="<tag>Hello\nWorld</tag>";

preg_match( '/<tag>[A-Za-z\\s]*<\\/tag>/' , $subject ); //true
preg_match( '/<tag>[^<]*<\\/tag>/' , $subject ); //true
preg_match( '/<tag>(.|\\n)*<\\/tag>/' , $subject ); //true
preg_match( '/<tag>.*<\\/tag>/s' , $subject ); //true
preg_match( '/<tag>.*<\\/tag>/' , $subject ); //ATTENTION! *false*
up
-17
Thomas
2 years ago
The meta character $ accepts a (one) newline character (\n).

(Take a moment to let this information sink in)

You might want to (r)trim() your input afterwards if you have a match because otherwise it (still) might not meet a length requirement or other strange stuff might happen when you store the input as-is.
To Top