Re正規式の書き方
[]と[]
例えば、[abc]は、「a」、「b」、または「c」のいずれかの文字に一致する.同じ文字セットを区間[a-c]で表すこともでき,前者と効果は一致する.小文字に一致したい場合は、REは[a-z]と書くべきです.
[^5]は、「5」以外の任意の文字に一致します.
いくつかのメタ文字
と書く
^検索する文字列の先頭に一致
&検索する文字列の末尾を一致させる
. 改行以外の任意の文字列を一致させる
b単語の先頭または末尾、つまり単語の境目
d任意の10進数に一致する.クラス[0-9]に相当します.
D数字以外の文字に一致する.クラス[^0-9]に相当します.
s任意の空白文字に一致します.クラス[trfv]に相当します.
S空白以外の文字に一致します.クラス[^trfv]に相当します.
w任意のアルファベット文字に一致する;クラス[a−zA−Z 0−9_]に相当する.
Wアルファベット以外の文字に一致する.クラス[^a-zA-Z 0-9_]に相当します.
メタ文字^と$は同じ位置にマッチしています.これはbと少し似ています.^検索する文字列の先頭に一致し、$は末尾に一致します.この2つのコードは、入力された内容を検証するのに役立ちます.例えば、1つのサイトでQ番号を5桁から12桁に記入するように要求された場合、^d{5,12}$を使用することができます.
繰り返し
私たちが議論した最初の繰り返し機能のメタ文字は*です.*アルファベット文字「*」に一致しません.逆に、前の文字が1回だけではなく0回以上一致することを指定します.
例えば、ca*tは、「ct」(0個の「a」文字)、「cat」(1個の「a」)、「caaat」(3個の「a」文字)などと一致する.REエンジンには、Cからの整数タイプのサイズの内部制限があり、2億個以上の「a」文字が一致しないようにしています.そんなに大きな文字列を作成するのに十分なメモリがないかもしれませんが、その制限は累積されません.
*のように繰り返すのは「貪欲」です.REを1つ繰り返すと、マッチングエンジンはできるだけ多くの回数を繰り返してみます.パターンの後部が一致していない場合、一致エンジンは戻り、より小さな繰り返しを再試行します.
一歩一歩の例は、より明確にすることができます.式a[bcd]*bを考えてみましょう.クラス[bcd]からのアルファベット「a」、0個以上を一致させ、最後に「b」で終わる.このREの文字列「abcbd」へのマッチングを考えてみましょう.
Step
Matched
Explanation
1
a
aマッチングモード
2
abcbd
エンジンは[bcd]*に一致し、文字列の最後に一致するようにします.
3
Failure
エンジンはbをマッチングしようとしたが、現在の位置は文字の最後なので失敗した.
4
abcb
戻って、[bcd]*を1文字少なくしてみます.
5
Failure
もう一度bを味わいますが、現在の最後の文字は「d」です.
6
abc
再び戻り、[bcd]*は「bc」にのみ一致します.
7
abcb
もう一度bを試してみると、今回の現在のビットの文字はちょうど「b」です.
もう1つの繰り返しメタ文字は+で、1つ以上一致していることを示します.*と+の違いに注意してください.*ゼロまたはそれ以上に一致するので、まったく現れないことができますが、+は少なくとも1回現れる必要があります.同じ例では、ca+tは「cat」(1つの「a」)、「caaat」(3つの「a」)と一致するが、「ct」と一致しない.
もっと限定符があります.疑問符?1回または0回一致する.何かを識別するために使用されるのはオプションだと思います.例えば:home-?brewは「homebrew」または「home-brew」に一致します.
最も複雑な反復限定子は{m,n}であり、mおよびnは10進数整数である.この限定子は、少なくともm個の反復があり、最大n個までの反復を意味する.例えば、a/{1,3}bは、「a/b」、「a//b」、および「a///b」と一致する.スラッシュがないため、「ab」にも「a///b」にもマッチしません.4つあるからです.
mまたはnを無視することができます.欠落した値に合理的な値が仮定されるためです.mを無視すると下境界は0であり、nを無視する結果は上境界が無限大になる--実際には以前に述べた2兆であるが、これは無限大と同じかもしれない.
注意深い読者は、他の3つの限定子がこのように表現できることに気づいたかもしれない.{0,}は*,{1,}は+に等しく,{0,1}は?同じです.できれば*、+、または?を使ったほうがいいです.簡単です.もっと短くて分かりやすいからです.
欲張りマッチングの問題
欲張りはもちろんいいことではない.正規表現に重複を許容できる制限子が含まれている場合、通常の動作は、(式全体を一致させることを前提として)できるだけ多くの文字を一致させることです.この式を例にとると、a.*bは、最も長いaで始まり、bで終わる文字列に一致します.これを用いてaaabを検索すると、文字列全体aaabに一致します.これは貪欲な一致と呼ばれます.
時には、できるだけ少ない文字をマッチングする怠惰なマッチングが必要になります.前に与えられた制限子は、その後ろに疑問符を付けるだけで、怠惰なマッチングモードに変換することができます.そうですか.任意の数の重複を一致させることを意味するが、一致全体を成功させることができる前提で最小限の重複を使用する.怠惰版の例を見てみましょう.
a.*?b最も短い、aで始まり、bで終わる文字列に一致する.aaabに適用すると、aab(最初の文字から3番目の文字)とab(4番目から5番目の文字)が一致します.
枝分かれ条件
枝分かれ条件とは、ある正規表現に2つの条件があることを意味します.2つの条件でもいいです.例えば、ある地域の郵便番号の基準は、5桁の数字でも9桁の数字(1123-23456)でもよいという表現です.では、「|」で表します.
\d{5}-\d{4}|\d{5}
枝分かれ条件を使用する場合は、各条件の順序に注意してください.これをd{5}|d{5}-d{4}に変更すると、5桁の郵便番号(および9桁の郵便番号の上位5桁)しか一致しません.枝分かれ条件が一致すると、各条件が左から右にテストされ、ある枝分かれ条件が満たされれば、他の条件は管理されないからです.