正規表現の経験があまりないので、ここでたくさん説明します。
最初に少し背景を説明します。正規表現にはトークンと数量詞があります。トークンは、何かに一致するものです。たとえばA
、ラテン大文字のAに一致するトークンです。数量詞は、トークンの後に配置され、そのトークンが連続して一致する頻度を変更することによってトークンに適用されます。たとえば+
、前のトークンがで一致するように数量化子です。少なくとも1回は、、、、またはにA+
一致A
します。AAAA
AAAAAAAAA
それが邪魔にならないように、必要になるさまざまな種類のトークンについての簡単な入門書です。
すでに述べたもの:、などのリテラル文字A
、1
またはその他。これは、いくつかの定義された値の1つを取ることができるパーツに必要になります。WP
一致WP
しますが、他には何もありません。
キャラクタークラスがあります。それらは角括弧で書かれ、それぞれが一致する可能性のあるさまざまな文字を含みます。文字クラスはまたはのいずれか[AB]
に一致します。文字範囲も存在する可能性があるため、ASCIIの一部であるすべての大文字のラテン文字に一致し、からまでの任意の数字に一致します。 A
B
[A-Z]
[1-9]
1
9
次に、必要になるいくつかの数量詞:
?
先行するトークンがまったく一致しないか、1回だけ一致するため、 (適用されるのは–直前のトークンにのみ適用されることをAB?
忘れないでください)またはのいずれかに一致します。可能であれば、常に一致しようとします。?
B
A
AB
AB
正確な繰り返し{5}
は、中かっこで囲まれた数字で書くことができます。A{2}
一致しAA
ます。
これで、正規表現の作成を開始できます。
まず、母音のない文字を含む文字クラスが必要です。[A-Z]
明らかにそれらが含まれるので、それは十分ではありません。ただし、複数の範囲を使用できます。
[B-DF-HJ-NP-TV-Z]
きれいではありませんが、機能します。一部の正規表現エンジンには、実際のセット操作のプロビジョニングがあります。たとえば、文字クラスを使用して特定の文字を再度除外するためのセットの違いですが、今のところこれで十分です。
ただし、2つの文字があるため、そのうちの2つが必要です。
[B-DF-HJ-NP-TV-Z]{2}
それからスペースがあるかどうか。すべての空白(スペースとタブを含む)を含む省略文字クラスがあります\s
。スペースのみを表示できるという厳密な要件がない限り、これを使用できます\s?
。堅牢性を高めるため\s*
に、スペースがない場合でもスペースがない場合でも、任意の数のスペースに一致するものを使用することもできます。
1
次に、から9
:までの数字が必要です。[1-9]
実際には、そのうちの2つが再び:[1-9]{2}
です。これまでのところ、次のものがあります。
[B-DF-HJ-NP-TV-Z]{2}\s*[1-9]{2}
次に、母音のない2つの文字が必要です。ここでも、スペースがあるかどうかは関係ありません。
[B-DF-HJ-NP-TV-Z]{2}\s*[1-9]{2}\s*[B-DF-HJ-NP-TV-Z]{2}\s*
その後、いくつかの定義されたオプションの1つが可能な部分があります。それらは、縦棒を使用する交互に書くことができます|
。最初に、数学のように括弧で書かれたグループが必要です。これは、交互の優先順位を制限するためです(これも数学の場合と同じです)。それらの中には、すべての可能なオプションを次のように区切ってリストしています|
。
(WP|NL|GP|EC|etc.)
これは文字クラスと同じですが、複数の文字に一致する点が異なります(ただし、提示されたものから1つのオプションのみが一致します)。
すべてをまとめると、
[B-DF-HJ-NP-TV-Z]{2}\s*[1-9]{2}\s*[B-DF-HJ-NP-TV-Z]{2}\s*(WP|NL|GP|EC|etc.)
次に、1つ小さなことがあります。ほとんどのエンジンの正規表現はデフォルトでサブストリングと一致するため、これは周囲に文字がある場合でも一致します。上記で一致するものは、いわば単一の「単語」である必要があるとはどこにも言いませんでしたkhdgdfgergBQ12RTGPrteryefg
。どこかで見つけた可能性があります。それ自体はどの文字とも一致しないが、一致を特定の場所に結び付ける特定のアサーションがあることを防ぐため。便利なものの1つは、からの文字(実際にはまったく役に立たず、文字、数字、アンダースコアを含む省略形の文字クラス)とからではない文字\b
の間に境界がある場所に一致するものです。すばやく汚いハックを行うには、単語の最初または最後に一致するようにするのに十分です。\w
\w
\b
\bfoo\b
一致しますが、一致foo
しa foo b
ませんfoobar
。より堅牢であるが、書き込みに時間がかかるオプションがあります。したがって、いくつかの目的には十分な次のものを使用できます。
\b[B-DF-HJ-NP-TV-Z]{2}\s*[1-9]{2}\s*[B-DF-HJ-NP-TV-Z]{2}\s*(WP|NL|GP|EC|etc.)\b
ただし、2番目のパターンの作成は今からあなたに任せます。これで、自分でそれを行うのに十分な知識が必要になります。
ちなみに、正規表現を学ぶのに本当に良いサイトはregular-expressions.infoです。物事は私がこれまでにできたよりもずっとよく説明されており、それは学習や参考としても同様に役立ちます。