今回は、定期的な繰り返しマッチングの使用方法について詳しく説明します。 定期的な繰り返しマッチングを使用する際の注意点とは何ですか。実際のケースを見てみましょう。
この記事の例では、正規表現繰り返しマッチングのチュートリアルについて説明します。参考として、次のようにみんなと共有してください。
注: すべての例では、正規表現の一致結果はソース テキストの [] の間に含まれています。一部の例は、Java を使用して実装されます。 Java 自体での正規表現の使用法については、対応する場所で説明します。すべての Java サンプルは JDK1.6.0_13 でテストされています。
1. 一致は何個ありますか前の記事では 1 つの文字の一致について説明しましたが、1 つの文字または文字のセットを複数回一致させる必要があります。どうすればよいでしょうか。たとえば、電子メール アドレスを一致させたい場合、前述の方法を使用して、w@w.w のような正規表現を作成する可能性がありますが、これは a@b.c のようなアドレスにのみ一致します。これは明らかに間違っています。 次に、その方法を見てみましょう。メールアドレスを照合します。
まず、電子メール アドレスの構成を知る必要があります。つまり、英数字またはアンダースコアで始まり、@ 記号、ドメイン名が続く文字のグループ、つまりユーザー名@ドメイン名アドレスです。ただし、これは特定の電子メール サービス プロバイダーによっても異なります。ユーザー名に . 文字を使用できる場合もあります。
1. 1 つ以上の文字と一致する同じ文字 (または文字のセット) の複数の繰り返しと一致するには、その文字 (または文字のセット) に接尾辞として + 文字を追加するだけです。 +1 つ以上の文字 (少なくとも 1 つ) と一致します。たとえば、a は a 自体に一致し、a+ は 1 つ以上の連続する a に一致します。[0-9]+ は複数の連続する数字に一致します。
注: + 接尾辞を文字セットに追加する場合、+ は文字セットの外側に配置する必要があります。そうしないと、繰り返し一致しません。たとえば、[0-9+] は数値または + 記号を表します。これは文法的には正しいですが、私たちが望むものではありません。
テキスト:
Hello, mhmyqn@qq.com または mhmyqn@126.com は私のメールアドレスです。正規表現:
w+@(w+.)+w+結果:
Hello,【mhmyqn@ qq .com】 または 【mhmyqn@126.com】 は私のメールアドレスです。分析: w+ は 1 つ以上の文字に一致し、部分表現 (w+.)+ は xxxx.edu のようなものに一致します。 . 文字で終わらないため、最後に w+ が付きます。 mhmyqn@xxxx.edu.cn のような電子メール アドレスも照合されます。
2. 0 個以上の文字に一致する0 個以上の文字に一致するには、メタ文字 * を使用します。その使用法は、1 文字または複数の文字の後に置くだけです。文字 (または文字のセット) が連続して出現すること。たとえば、正規表現 ab*c は、ac、abc、abbbbc などに一致します。
3. 0 個または 1 個の文字と一致する0 個または 1 個の文字と一致するには、メタ文字 ? を使用します。前の記事で述べたように、正規表現 rnrn は空白行の一致に使用されますが、Unix と Linux では r は必要ないため、Windows ではメタ文字 ?、r?nr?n を空白行の一致に使用できます。 Unix および Linux の空白行と一致するだけでなく。 http または https プロトコルに一致する URL の例を見てみましょう:
テキスト:
URL は http://www.mikan.com です。安全に接続するには、https://www.mikan.cominstead. を使用してください。 正規表現:
https?://(w+.)+w+結果:
URLは【http://www.mikan.com】、安全に接続するには【https:// www.mikan.com] 代わりに 分析: このパターンは https? で始まります。これは、? の前の文字が存在する場合と存在しない可能性があることを意味するため、http または https に一致し、後半部分は次と同じです。前の例。
2. 正規表現内の一致する繰り返しの数+、* および ? は多くの問題を解決します。
1) 一致する文字 + と * の数に上限はありません。一致する文字の最大数を設定する方法はありません。
2) +、*、および ? は少なくとも 1 つまたはゼロの文字に一致します。一致する文字の最小数を別の値に設定することはできません。
3) * と + のみを使用する場合、それらが一致する文字数を正確な数に設定することはできません。
正規表現は、繰り返しの数を設定するための構文を提供します。繰り返しの数は、{ と } 文字を使用して指定し、それらの間に値を記述する必要があります。
1. 繰り返される一致の数の正確な値を設定します
繰り返される一致の数の正確な値を設定したい場合は、{ と } の間に数値を書き込むだけです。たとえば、{4} は、元のテキスト内でその前の文字 (または文字のセット) が 4 回繰り返されていなければ一致とみなされないことを意味します。3 回しか出現しない場合は、一致とみなされません。
ページ上の色の一致の例について以前の記事で述べたように、#[[:xdigit:]]{6} または #[0-9a-fA-F]{ のように、繰り返しの数を使用して一致させることができます。 6} 、Java の POSIX 文字は #\p{XDigit}{6} です。
2. 繰り返される一致の数の間隔を設定する
{} 構文を使用して、繰り返される一致の数の間隔を設定することもできます。つまり、繰り返される一致の数の最小値と最大値を設定します。 。このような間隔は、{n, m} の形式で指定する必要があります (n>=m>=0)。たとえば、日付形式が正しいかどうかを (日付の有効性はチェックせずに) チェックする正規表現 (日付 2012-08-12 または 2012-8-12 など): d{4}-d{1, 2}-d{1, 2}。
3. 少なくとも何回繰り返されるかを一致させます
{} 構文の最後の使用法は、{3,} などの最小繰り返し数 (ただし最大繰り返し数ではありません) を与えることです。少なくとも3回繰り返します。注: {3,} にはカンマが必要です。カンマの後にスペースを入れることはできません。そうしないと、何か問題が発生します。
例を見てみましょう。正規表現を使用して、$100 を超えるすべての金額を検索します。 2 500.44
$44.30
正規表現:$d{3,}.d{2}
結果:$25.36
【$125.36】
【$205.0】
【$2500.44】
$44.30+, *, ? は繰り返しの数として表すことができます:
+ は {1 に相当します。}* は {0,}
に相当しますか? 3. 過剰一致を防ぐ
? {n} と {n,m} には一致する繰り返しの数に上限がありますが、* には上限がありません。 、 +、 {n,} であり、場合によっては過剰一致が発生します。
html タグと一致する例を見てみましょう
テキスト:昨日は 歴史、明日は ミステリー、しかし今日は< b>gift.
正規表現:<[Bb]>.*[Bb]>
結果:
昨日は
【歴史、明日はミステリー、しかし今日はギフト]分析: <[Bb]>一致 は タグ (大文字と小文字を区別しない) に一致します。しかし、結果は予想どおり 3 つではありません。最初の タグから最後の までが一致します。なぜこれが起こっているのですか? * と + はどちらも貪欲なメタ文字であるため、一致するときの動作パターンは、テキストの先頭から最後までではなく、テキストの先頭から最後まで一致するように最善を尽くします。最初の一致が見つかりました。
この貪欲な動作が必要ない場合は、これらのメタキャラクターの遅延バージョンを使用できます。遅延とは、貪欲とは対照的に、できるだけ少ない文字を一致させることを意味します。遅延メタ文字は、貪欲メタ文字に ? 接尾辞を追加するだけで済みます。これは貪欲なメタキャラクターの怠惰なバージョンです:
* *?
+ +?
{n,} これを <[Bb]>.*?[Bb] に変更するだけです。 ]> の結果は次のとおりです:
歴史
謎
ギフト
IV. 概要
正規表現の真の威力は、一致の繰り返し数に反映されます。ここでは、メタ文字 +、*、? の使用法を紹介します。一致の数を正確に判断したい場合は、{} を使用します。メタキャラクタには、貪欲と遅延の 2 種類があります。過剰な一致を防ぐ必要がある場合は、正規表現を作成するために遅延メタキャラクタを使用してください。位置合わせについては次回の記事で紹介します。
この記事の事例を読んだ後、あなたはその方法をマスターしたと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。 推奨読書:
正規表現チュートリアルの位置一致チュートリアル(コード付き)phpとjsを使用して、数字と文字を組み合わせたパスワードの正規一致を実装します
以上が定期的な繰り返しマッチングの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。