ホームページ >バックエンド開発 >PHPチュートリアル >正規表現チュートリアル - 文字グループのマッチングの詳細な説明
この記事の例では、正規表現チュートリアルで文字のグループを照合する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
注: すべての例では、正規表現の一致結果がソース テキストの [and] の間に含まれています。一部の例は Java を使用して実装されます。 Java 自体の正規表現 式の使用法については該当箇所で説明します。すべての Java サンプルは JDK1.6.0_13 でテストされています。
1. 複数の文字の 1 つと一致する
前回の記事「正規表現チュートリアル: 単一文字の一致の詳細な説明」では、na または sa で始まるテキスト ファイルを一致させる例で、使用される正規表現は .a でした。 ..TXT。 cal.txt という別のファイルがある場合は、それも照合されます。 na または sa で始まるファイルのみを一致させたい場合はどうすればよいですか?
n または s のみを検索したいので、任意の文字に一致する . を使用することは明らかに不可能です。正規表現では、[and] を使用して文字セットを定義できます。[and] を使用して定義された文字セットでは、これら 2 つのメタ文字の間にあるすべての文字が文字セットの一部となります。一致する結果は、次のいずれかのメンバーと一致するテキストです。セット。
前と同様の例を見てみましょう:
テキスト:
sales.txt
na1.txt
na2.txt
sa1.txt
sanatxt.txt
cal.txt
定期式: [ns]a..txt
結果:
sales.txt
【na1.txt】
【na2.txt】
【sa1.txt】
sanatxt.txt
cal.txt
分析: ここで使用されている正規表現は [na] で始まり、このセットは文字 n または s に一致しますが、他の文字には一致しません。 [ と ] はどの文字とも一致しません。文字のセットを定義するだけです。次に、 a は文字 a に一致し、 . は . 文字自体に一致し、 txt は txt 文字自体に一致し、一致結果は予想と一致します。
ただし、ファイルの 1 つが usa1.txt である場合は、それも照合されます。これは後述する位置合わせの問題である。
2. 文字セット間隔を使用します
上記の例で、na または sa で始まり、その後に数字が続くファイルのみを照合したい場合はどうすればよいでしょうか?正規表現 [ns]a..txt では、. は数字を含む任意の文字と一致します。この問題は、文字のコレクションを使用して解決できます:
sales.txt
na1.txt
na2.txt
sa1.txt
san.txt
sanatxt.txt
cal.txt
正規表現:[ns] a [0123456789].txt
result:
sAles.txt
na1.txt
cal.txt
分析: 結果からわかるように、na または sa で始まりその後に数字が続くファイルのみが一致しますが、san.txt は文字セット [0123456789] が制限に使用されているため一致しません。 3 番目の文字には数字のみを使用できます。
正規表現では、0 ~ 9、a ~ z などの一部の文字間隔が頻繁に使用されます。文字間隔の定義を簡素化するために、正規表現では文字間隔を定義するための特別なメタキャラクタが提供されます。上の例と同様に、正規表現を使用して [ns]a[0-9].txt と一致させることができ、結果は上記とまったく同じになります。
文字間隔は数字に限定されません。以下は有効な文字間隔です:
[A-F]: A から F までのすべての大文字と一致します。
[A-Z]: A から Z までのすべての大文字と一致します。
[A-z]: ASCII 文字 A から ASCII 文字 z までのすべての文字と一致します。ただし、この間隔は一般的には使用されません。これは単なる例です。 ASCII の Z と a の間に配置される [ や ^ などの文字も含まれるためです。
文字範囲の最初と最後の文字には、ASCII 文字リスト内の任意の文字を使用できます。ただし、実際に使用する場合、最も一般的に使用される範囲は数字とアルファベットです。
注: 文字間隔を定義する場合、間隔の最後の文字を最初の文字より小さくすることはできません ([9-0] など)。 - メタキャラクターは [ と ] の間にのみ出現できるため、[ と ] の外側にある場合、それは単なる通常の文字であり、 - それ自体とのみ一致します。
同じ文字セットで複数の文字範囲を指定できます。たとえば、[0-9a-zA-Z] は、任意の大文字、小文字、数字と一致します。
Web ページ内の色の一致の例を見てください:
テキスト:
<span style="background-color:#3636FF;height:30px; width:60px;">测试</span>
正規表現: #[0-9A-Fa-f] [0-9A-Fa-f] [0- 9A -Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f]
結果: d7aecfdfb8c46c4fa23d2a3122b4cc20テスト54bdf357c58b8a65c66d7c19c8e4d114
分析: Web ページでは、通常、色は # で始まる RGB 値として表され、R は赤、G は緑、B は青を表します。 、RGB のさまざまな組み合わせによって、あらゆる色をブレンドできます。 RGB 値は、白を表す #000000、黒を表す #FFFFFF、赤を表す #FF0000 のように 16 進数値で表されます。したがって、Web ページで色を一致させるための正規表現は # で始まり、同じ 6 つの [0-9A-Fa-f] 文字のセットが続きます (これは #[0-9A-Fa-f]{6 と省略できます)これについては、「リピート マッチング」で後述します)。
3. 一致しないものを取得する
文字セットは、通常、いずれかの文字と一致する必要がある文字のセットを指定するために使用されますが、場合によっては、その逆を行う必要があり、取得する必要のない文字のセット、つまり、これらの文字を除く文字のセットを指定する必要があります。その文字セットの文字では、他の文字と一致する可能性があります。
たとえば、na または sa で始まり、後に数字が続かないファイルを照合するには:
テキスト:
sales.txt
na1.txt
na2.txt
sa1.txt
sanatxt.txt
san.txt
正規表現: [ns]a[^0-9].txt
結果:
sales.txt
na1.txt
na2.txt
sa1.txt
sanatxt。 txt
[san.txt]
分析: この例で使用されているパターンは、前のパターンとはまったく逆です。前の [0-9] は数字のみに一致しましたが、ここでは [^0-9] は数字以外に一致しました。 。
注: [ と ] の間の ^ は否定を意味します。正規表現の先頭にある場合は、位置一致が一致することを意味します。これについては後で説明します。同時に、^ の効果は、^ 文字の直後の文字または文字間隔だけでなく、特定の文字セット内のすべての文字または文字間隔に適用されます。たとえば、[^0-9a-z] は、数字や小文字に一致しないことを意味します。
4. 概要
メタキャラクター [および] は文字セットを定義するために使用され、その意味はセット内のいずれかの文字と一致する必要があるということです。文字セットを定義するには 2 つの方法があります。1 つはすべての文字をリストする方法、もう 1 つは文字間隔の形式で指定されたメタ文字を使用する方法です。文字セットは、メタ文字 ^ を使用して否定できます。これにより、指定された文字セットが照合操作から強制的に除外されます。文字セット内の文字を除き、他の文字も照合できます。
次の記事では、正規表現でのいくつかのメタキャラクターの使用について説明します。
この記事が皆さんの正規表現の学習に役立つことを願っています。
文字グループの一致に関する正規表現チュートリアルの詳細な説明については、PHP 中国語 Web サイトに注目してください。