ホームページ >ウェブフロントエンド >jsチュートリアル >正規表現を使用して文字列内の重複する一致を見つけるにはどうすればよいですか?

正規表現を使用して文字列内の重複する一致を見つけるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-05 08:21:11289ブラウズ

How Can I Find Overlapping Matches in a String Using Regular Expressions?

正規表現を使用した重複する文字列の一致について

特定のシナリオでは、グローバル フラグを指定した string#match メソッドが、入力文字列。たとえば、文字列「12345」について考えてみましょう。正規表現 /d{3}/g を使用すると、["123"、"234"、"345"] の 3 つの一致が得られると予想されます。ただし、一致するのは「123」 1 つだけです。

これは、string#match メソッドが一致した文字を消費する (つまり、インデックスを読み取って先に進める) ためです。そのため、「123」と一致した後、現在のインデックスは「4」を指し、正規表現エンジンは停止し、これ以上一致は見つかりません。

ゼロ幅アサーションによる重複一致の解決

この制限に対処するための一般的な手法には、キャプチャ グループで肯定的な先読みアサーションを使用することが含まれます。このアプローチでは、実際に部分文字列を使用せずに、部分文字列の存在を主張します。入力文字列内のすべての位置を繰り返しテストすることで、目的の重複一致を取得できます。

var re = /(?=(\d{3}))/g;
console.log(Array.from('12345'.matchAll(re), x => x[1]);

この例では、連続する 3 桁を消費せずに取得する正の先読みアサーションを含む正規表現を作成します。 matchAll を使用して入力文字列を反復処理することで、目的の一致リスト ["123"、"234"、"345"] を取得します。

この手法はさまざまなプログラミング言語でサポートされており、開発者は次のような処理を行うことができます。重複する文字列一致シナリオを簡単に実行できます。

以上が正規表現を使用して文字列内の重複する一致を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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