ホームページ ウェブフロントエンド jsチュートリアル 正規表現チュートリアルでの繰り返しマッチングの詳細説明

正規表現チュートリアルでの繰り返しマッチングの詳細説明

Jan 09, 2017 pm 04:01 PM

この記事の例では、正規表現チュートリアルの繰り返しマッチングについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです。

注: すべての例では、正規表現の一致結果がソース テキストの [and] の間に含まれています。一部の例は 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+] は数値または + 記号を表します。これは文法的には正しいですが、私たちが望むものではありません。

テキスト: こんにちは、mhmyqn@qq.com または mhmyqn@126.com が私のメールアドレスです。

正規表現: w+@(w+.)+w+

結果: こんにちは、【mhmyqn@qq.com】 または 【 mhmyqn @126.com] は私のメールです。

分析: w+ は 1 つ以上の文字に一致し、部分式 (w+.)+ は xxxx.edu. のような文字列に一致しますが、最後の文字は一致しません。 , したがって、その後に w+ が続きます。 mhmyqn@xxxx.edu.cn のような電子メール アドレスも照合されます。

2. 0 個以上の文字に一致する

0 個以上の文字に一致するには、メタ文字 * を使用します。その使用方法は、文字または文字セットの後に置くだけです (または文字の集合)。文字) が連続して 0 回以上出現します。たとえば、正規表現 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 を超えるすべての金額を検索します。

正規表現: $d{3 ,}。 d{2}

結果:

$25.36

【$125.36】

【$205.0】

【$2500.44】

$44.30

+、*、? は繰り返しの数として表すことができます:

+同等のイン{1,}

* は {0,}

と同等ですか? 過剰一致を防止します

は、{n} と { n, m} にも一致する繰り返しの回数には上限がありますが、*、+、{n,} には上限がないため、場合によっては過剰一致が発生します。

HTML タグのマッチングの例を見てみましょう

テキスト:

昨日は 歴史、明日は ミステリー、しかし今日は ;gift< ;/b>.

正規表現: <[Bb]>.*

結果:

昨日は【履歴、明日はミステリー、しかし今日はギフト]。

分析: <[Bb]>はと一致します(大文字と小文字は区別されません)。 < ;/[Bb]> は と一致します (大文字と小文字は区別されません)。しかし、結果は予想どおり 3 つではありません。最初の
タグから最後の までが一致します。

なぜこれが起こっているのですか? * と + は両方とも貪欲なメタ文字であるため、一致するときの動作パターンは、テキストの先頭から最後までではなく、テキストの先頭から末尾までを一致させるために最善を尽くします。最初の一致が見つかりました。

この貪欲な動作が必要ない場合は、これらのメタキャラクターの遅延バージョンを使用できます。遅延とは、貪欲とは対照的に、できるだけ少ない文字を一致させることを意味します。遅延メタ文字は、貪欲メタ文字に ? 接尾辞を追加するだけで済みます。以下は、貪欲なメタキャラクターの遅延バージョンです:

* *?

+ +?

{n,} {n,}?

したがって、上記の例では、正規表現を < に変更するだけで済みます。 ; [Bb]>.*? 結果は次のようになります:

history

mystery

; Gift

IV. 概要

正規表現の真の威力は、一致の繰り返しの数に反映されます。ここでは、+、*、? などのいくつかのメタ文字の使用法を紹介します。一致の数を正確に判断したい場合は、{} を使用します。メタキャラクタには、貪欲と遅延の 2 種類があります。過剰な一致を防ぐ必要がある場合は、正規表現を作成するために遅延メタキャラクタを使用してください。位置合わせについては次回の記事で紹介します。

この記事が皆さんの正規表現の学習に役立つことを願っています。

その他の正規表現チュートリアルや繰り返し一致の詳細な説明、および関連記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:17 PM

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

See all articles