ホームページ  >  記事  >  ウェブフロントエンド  >  正規表現によるグループ化の詳しい説明(コード付き)

正規表現によるグループ化の詳しい説明(コード付き)

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-30 11:39:341998ブラウズ

今回は、正規表現グループ化の詳細な説明(コード付き)、正規表現グループ化の注意点とは何か、そして以下は実際的なケースです。見てみましょう。

正規表現のグループ化:
3 つの数字を一致させたい場合、正規表現は次のように記述できます:

d{3}d{3}

以上代码使用重复量词可以匹配3位数字。
但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码如下:

ab{3}

以上正则表达式只能够重复3次b。
为了实现重复多个字符可以使用小括号来指定子表达式或者说分组来实现此功能,例如:

(ab){3}

上面的正则就可以重复ab了。
所谓的分组就是使用小括号将一些项包括起来,使其成为独立的逻辑域,那么就可以像处理一个独立单元一样去处理小括号的内容。

下面看一段代码实例:

(d{1,3}.){3}d{1,3}

上面是一个简单的ip匹配正则表达式。由小括号包裹的内容会被作为一个独立的逻辑域进行操作。
分组的作用:
在正则表达式中,分组具有举足轻重的作用,下面就简单对它的功能做一下简单的介绍。

一.起到原始的分组作用:

把单独的项目进行分组,以便合成子表达式,这样就可以像处理一个单独的字符那样,对其应用|、+、*或者?等元字符来操作它们。
实例代码如下:

var str="I love javascript and java";
console.log(str.match(/java(script)?/gi));

由以上代码的运行结果可以看出,正则表达式既可以匹配字符串javascript也可以匹配java,这是因在正则表达式中采用了分组,并且使用重复量词?,可以使前面的子表达式重复0次或者1次。

二.定义子模式:

分组另一个非常重要的作用就是在完整的模式中定义子模式。
当一个正则表达式成功的和目标字符串相匹配时,可以从目标字符串中抽出和小括号中字表达式相匹配的部分。
假如我们匹配的是以一个数字开头的后面跟着一个或者多个不区分大小写的字母的字符串,正则表达式可以这样写:

/d[a-zA-Z]+/

假如我们真正关心和需要的是开头的数字,那么就可以将正则表达式的数字部分放入小括号就可以从检索到的匹配中抽取数字.

/(d)[a-zA-Z]+/

三.引用子表达式:
正则表达语法中可以在同一个表达式中的后部引用前面的子表达式。这是通过在""后面跟随数字实现的。此数字指定了小括号字表达式在正则表达式中的位置,例如1是引用的第一个带有圆括号的子表达式,自然2就是第二个带有圆括号的子表达式。
特别注意:由于子表达式是可以相互嵌套的,那么计算子表达式的位置的时候,只要确定左括号的位置即可。例如:

/(java(script))/

在以上正则表达式中,嵌套的子表示是可以用2表示。
对于子表达式的引用,并不是引用的匹配模式,而是对子表示匹配内容的引用。一般来说对子表达式的引用一般是用来实施一条约束,看下面的代码:

/(['"])[^'"]*1/

上記のコードは、繰り返しを使用して 3 つの数字を一致させることができます。数量指定子 。

しかし、実際のアプリケーションでは、複数の文字を繰り返す必要があることがよくあります。たとえば、2 つの文字 ab を繰り返したい場合、次のコードを使用するのは適切ではありません。

ab{ 3}

上記の正規表現は 3 回のみ繰り返すことができます。 b. 🎜複数の文字を繰り返すには、括弧を使用して部分式またはグループを指定してこの機能を実現できます。例: 🎜🎜(ab){3}🎜🎜上記の正規表現は ab を繰り返すことができます。 🎜いわゆるグループ化とは、括弧を使用していくつかの項目を独立した論理ドメインにし、括弧の内容を独立した単位のように処理することです。 🎜🎜🎜以下のコード例を見てください: 🎜🎜🎜(d{1,3}.){3}d{1,3}🎜🎜上記は、単純な IP 一致正規表現です。括弧で囲まれた内容は独立した論理フィールドとして動作します。 🎜🎜グループ化の役割:🎜🎜 正規表現では、グループ化は重要な役割を果たします。その機能について簡単に説明します。 🎜🎜🎜1. 元のグループ化の役割を果たします: 🎜🎜🎜単一の文字を処理するのと同じように、|、+、*、? などを適用できるように、個々の項目をグループ化します。 http://www.php.cn/code/10419.html" target="_blank">メタキャラクター 🎜 を使用して操作します。 🎜コード例は次のとおりです:🎜rrreee🎜上記のコードの実行結果から、正規表現が String 🎜javascript も java に一致します。 これは、正規表現でグループ化が使用され、反復数量詞が使用されているためでしょうか。 、前の部分式を 0 回または 1 回繰り返すことができます。 🎜🎜🎜2. サブパターンを定義する: 🎜🎜🎜 グループ化のもう 1 つの非常に重要な役割は、完全なパターン内でサブパターンを定義することです。 🎜正規表現が対象文字列と一致すると、対象文字列の中から括弧内の添字表現と一致する部分を抽出することができます。 🎜数字で始まり、その後に大文字と小文字を区別しない 1 つ以上の文字が続く文字列と一致する場合、正規表現は次のように記述できます:🎜🎜/d[a-zA-Z]+/ code>🎜🎜本当に重要で必要なのは先頭の数値である場合、正規表現の数値部分を括弧で囲んで、取得した一致から数値を抽出できます。🎜🎜<code>/( d) [a-zA-Z]+/🎜🎜🎜3. 部分式の引用:🎜🎜 正規表現構文では、同じ式の後ろにある前の部分式を参照できます。これは、「」の後に数字を続けることで実現されます。この数値は、正規表現内の括弧で囲まれた部分式の位置を指定します。たとえば、1 は括弧で囲まれた最初の部分式であり、当然のことながら 2 は括弧で囲まれた 2 番目の部分式です。 🎜特記事項: 部分式は互いにネストできるため、部分式の位置を計算するときは、左括弧の位置を決定するだけで済みます。例: 🎜🎜/(java(script))/🎜🎜 上記の正規表現では、ネストされた部分表現は 2 で表すことができます。 🎜部分式への参照は、参照の一致パターンではなく、部分式の一致する内容への参照です。一般的に、部分式への参照は、一般に制約を実装するために使用されます。次のコードを参照してください: 🎜🎜/(['"])[^'"]*1/🎜🎜 通常、左下と右側の引用符は一致します。先頭が二重引用符の場合、末尾も二重引用符でなければなりません。先頭が単一引用符の場合、末尾も単一引用符でなければなりません。他の引用符を途中に含めることはできません。文字列、例: 🎜🎜" Script House welcomes you"🎜'Script House welcomes you'🎜

次に、上記の正規表現はこの関数を実装します。前の部分式が単一引用符に一致する場合、次の 1 は単一引用符を意味します。部分式が二重引用符に一致する場合、次の 2 は二重引用符を意味します。
非参照グループ化:
グループ化は一定量のシステム リソースを占有します。特に正規表現が長い場合、一致速度が低下します。場合によっては、グループを設定するだけで参照が必要ない場合があるため、非参照タイプのグループ化を使用することが適切な選択となります。

/(java(?:script))/

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨書籍:

正規表現を使用して文字列内の複数のスペースを JS の 1 つのスペースに置き換える方法

PHP の正規表現を使用した貪欲、非貪欲、およびバックトラッキングの効率の詳細な説明 (コード)

以上が正規表現によるグループ化の詳しい説明(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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