正規表現言語は、リテラル (通常の) テキスト文字とメタキャラクターという 2 つの基本的な文字タイプで構成されます。
関連する推奨事項:
1. 正規表現構文チュートリアル (オンライン テスト ツールを含む)
2. PHP 正規表現の簡単な紹介ビデオ チュートリアル
メタキャラクターは正規表現を使用して処理できます。メタキャラクターは、[ ]
に配置された任意の 1 文字 (たとえば、[a]
は 1 つの小文字 a
と一致することを意味します)、または一連の文字 (たとえば、[a-d]
は、a、b、c、d
の間の任意の文字と一致することを意味し、\w
は任意の英字、数字、アンダースコアを意味します)、共通メタキャラクター
共通メタキャラクター
文字 |
説明 |
特別な指示 |
#.
| 改行文字 (\n)
| ~## を除く任意の文字と一致します。 |
#[abcde]
| a b c d e
の任意の文字と一致します。すべての文字は | または # です##. 関係
|
[a-h]
は、 a | から h までの任意の文字と一致します。 #~
|
| [^fgh]
は と一致しません fgh の文字は # と一致します | ##. 否定を示すには、角括弧 [ ] の最初の文字の前に #^ | を追加します 角括弧内にある文字とは一致しません括弧 \w
|
大文字、小文字の英語文字、および 0 ~ 9 の数字と一致します。 とアンダースコアの間にある 1 つは と同等です。 [a-zA-Z0-9_]#~ |
##\W |
は ## の反対です#\w | は
[^a-zA-Z0-9_]
~ |
\s と同等です
| は任意の空白文字に一致します。[\f\n\r\t\v] |
~
と同等です。 |
\S
| は \s | の逆で、
[^\s]
~ と同等です。 |
\d
| は、0 ~ 9 の任意の 1 桁に一致し、[0-9] |
と同等です。 ~
| ##\D
# は | \d の逆で、 | [^0- と同等です。 9]
~
|
#[\u4e00-\u9fa5] 任意の単一の | 中国語文字と一致します(中国語) (ここでは、 | Unicode
エンコーディングで表される中国語の文字が使用されます)
~
|
\b 単語の先頭または末尾と一致します。 |
~ |
^ | 単語の先頭と一致します。文字列 |
を括弧の最初の文字の前に置くと、 |
$ | ## という逆数を意味する になります。 | #文字列の末尾と一致する~ |
正規表現修飾子 関数: の出現数を制限します。この記号の前の | ユニット |
ユニット: |
前の文字が文字の場合、この文字 文字は
ユニットです
#以前に長い文字列を囲むためにかっこを使用した場合は、かっこ全体が ユニットとみなされます
上記のメタ文字はすべて一致します。単一の文字。複数の文字を同時に一致させたい場合は、修飾子を使用する必要があります。一般的な修飾子をいくつか次に示します (下の表の
n
と m は両方とも - integer## を表します) #。 )
- キャラクター
説明
特別な指示
| # は、0 から複数のメタキャラクタに一致します。{0,} |
| ~
と同等です。 ?
| は 0 ~ 1 個のメタキャラクタに一致します。{0,1}
| ~ |
## と同等です。
# は少なくとも 1 つのメタキャラクターに一致します。 | {1,}
~ |
|
と同等です。 {n}
n 個のメタ文字に一致 |
~
|
| {n, }
少なくとも n 個のメタ文字に一致します ~ |
|
| {n,m}
n ~ m 個のメタ文字に一致します ~ |
|
| \b
単語の境界を一致させる ~ |
| #^ |
文字列は指定された文字で始まる必要があります~ |
|
$ |
文字列は指定された文字で終わる必要があります~ |
|
説明 - 特殊なケース
- 複数のメタ文字またはリテラル テキスト文字を 括弧で囲んで、
^ などの
グループ を形成できます。 (13)[4-9]\d{8}$
は、13 で始まる任意の携帯電話番号を表します。
-
abcabcabc
は 1 回以上出現する最後の文字 c
を表し、
-
(abcabcabc)
は文字列全体を表しますabcabcabc
が 1 回以上表示されます。
-
|
を使用して または
の関係を示すことができます。たとえば、z|j|q
は次のことを示します。一致する z、j、q
の任意の文字。実際、これは [zjq]
と同等です。
-
ab|cd|ef
は、ab
、cd
、または ef
のいずれかを意味します。
-
a(b|cd|e)f
の意味: a
で始まり、b
または cd
どちらか e
は f
で終わります。
- 概要:
|
( または
) の唯一の境界は 括弧 (( )
)
- #[0-9A-Z.?]
この規則をどのように理解していますか?
- .
と
? が
角括弧内にある場合、、.、
? となります。
通常の文字。ドットと疑問符です。 [ ] の優先度が
. や ? の優先度よりも高いことがわかります。
この正規表現は、文字列 - ?aaa.bbb
と正確に一致します。ここで、
. と ? は完全に通常の文字として扱われることに注意してください。
上級 1 - 複数選択構造 複数選択構造は、実際にはメタキャラクター | (または) を使用します。
定義範囲: 先頭、末尾、括弧
通常 | 意味 |
Windows98|Windows2000|WindowsXP
| は、Windows98 または Windows2000 または WindowsXP
| # と一致します
^Windows98|Windows2000|WindowsXP$
| Windows98 で始まるか、Windows2000 が含まれるか、または WindowsXP で終わる注 | の境界は先頭、末尾、括弧のみであるため、 # と $ は両方とも | の範囲に含まれます。
|
Windows(98|2000|XP)
| Windowsその後98 または 2000 orXP
|
概要: 複数選択構造には多くの文字を含めることができますが、括弧
の境界を超えることはできません。
上級 2 - グループ化と後方参照
グループ化
- 単一文字を繰り返す方法はすでに知っています;
- しかし、文字列を繰り返したい場合はどうすればよいですか? 括弧を使用して部分式 (グループ化とも呼ばれます) を指定できます。
- (\d{1,3}\.){3}\d{1,3}
単純な IP アドレス一致式
ただし、次の式にも一致します。不可能な IP アドレス - 256.300.888.999。もっと正確な正規表現を書けますか?
- ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4] \d|25[0-5]|[01]?\d\d?)
後方参照
括弧を使用してサブを指定します。式 (- grouped) を使用すると、この部分式に一致するテキストを キャプチャして、式内または他のプログラム内でさらに処理することができます。
デフォルトでは、各グループには自動的にグループ番号が付けられます。ルールは次のとおりです: - グループの 左括弧
を記号として、左から右に最初のグループ番号 グループ番号は 1、2 番目は 2、というように
となります。
例:
- #\b(\w )\b\s \1\b
は重複を照合するために使用できます
という単語は、次のような単語と一致します: - where where go, tom tom happy
## 簡単な説明: 正規表現内の を使用して前に括弧を使用して分割 (グループ化) し、その後、括弧 と引用符
で一致した内容を \1、\2## を使用して後ろに配置します。 #などで表します。 (最初のかっこは
\1...)括弧内に括弧が入れ子になっている場合
(\w (.?)) 覚えておいてください: この時点では、括弧を左から右に数える記号として
( を使用する必要があります。 .
上級 3 - Look Around (ゼロ幅アサーション)
Look around はどの文字にも一致せず、テキスト内の
特定の位置にのみ一致します。 # に似ています。 ## \b- , #,
$
like that. 周りを見回すと文字数が占有されません。
周りを見渡すと # に分かれます## order reverse order には 2 種類があります: -
order(?=exp)
次の - 位置
- exp
と一致します。例:
(?=\d) 現在の位置の右側は数値です。
(? !exp) 次の
位置は一致できません - exp
例:
(?!\d) 現在の位置の右側
逆順
(?<=exp) 位置の前の - は # と一致します。
##exp- 。例:
(?<=\d)
現在位置の左側 数値 (?< ;!exp)
。位置の前の は
exp- と一致することはできません。例:
(?!\d )
現在の位置は数値ではありません。
Advanced 4 - Greed and Lazy
正規表現が含まれている場合 quantifier
(
、*- 、{3,12} などの指定された数のコード) を繰り返すことができます。 ,
通常の動作は、できるだけ多くの文字と一致することです
.
正規表現: a.*b
、a# で終わる最長の文字と一致します。 ## で始まり b で終わる文字列。これを使用して - aabab
を検索すると、文字列
aabab 全体と一致します。これは -- と呼ばれます。 -----
貪欲なマッチング
-
さらに
遅延マッチング、つまり指定されたとおりにできるだけ少ない文字をマッチングする必要があります。上記のすべての量指定子は、遅延マッチング パターンに変換できます。 後ろに疑問符を追加するだけです。 ?-
。このように、- .*? は、任意の数の一致を意味します。ただし、 全体が正常に一致するという前提で、最も繰り返しの少ない を使用します。
a.*?b は、
で始まる最も短いものと一致します。 a 、 b で終わる文字列。 - aabab
に適用すると、
aab と
ab に一致します。
概要:
貪欲モードと遅延モードの違いは次のとおりです:
遅延モード は数量詞の後ろにあります
*疑問符
? がもう 1 つあります。 上級 5 - パターン マッチングの優先順位
正規表現を使用する場合は、マッチングの順序に注意する必要があります。通常、同じ優先度 が左から右の
に計算され、異なる優先度
を持つ操作は最初に高く、次に
が低くなります。さまざまな演算子の一致順序の優先順位は、次の表に示すように 高から低
です。
#注文
|
メタキャラクター
|
説明
|
1 |
\
| エスケープ文字 |
2 |
()、 (?:)、 (?=)、 [] #モード単位と原子テーブル |
|
3
| *, ,? 、{n} 、{n,} 、{n,m} 重複一致 |
|
4
|
、$ 、\b 、\B 、\A 、\Z 国境制限 |
| ##5
| |
パターンの選択
|
| 例
1. 文字エスケープ
1Q: 文字列
333333\$33\ と一致するには、次のようにします。 33333 の
\$ と書きますか? 2 質問: PHP の
preg_match 関数が、上記の
\$# # と一致させるために
一重引用符 と
二重引用符 の式を使用している場合#、書き方? 答え:
式に必要なルールは \\\$
一重引用符を使用してください上記の文字列 - '/\\\\\\$/'
を表現します。 (見やすくするために、
'/\\ \\ \\ $/' に分割しています) -
上記の文字列を表すには二重引用符を使用します
"/\\ \\ \\\$/「。 (見やすくするために、
"/\\ \\ \\ \$/" に分割しています) -
何を質問していますか?
別の答え: -
PHP の一重引用符は文字をエスケープせず、\ のみをエスケープします。式を生成するには 6
\ が必要です。 -
エスケープ \
に加えて、二重引用符は $- をエスケープするためにもう 1 つの
\ も必要となるため、7 つの ## が必要になります。 #\
。
推奨される関連チュートリアル: PHP ビデオ チュートリアル
以上が正規表現の詳しい解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。