この記事では、主に 正規表現ゼロ幅アサーションの概念、分類、PHP 実装スキル、および関連する注意事項を紹介します。この記事では例を説明します。正規表現のゼロ幅アサーション。参考のために皆さんと共有してください。詳細は次のとおりです。
前書き以前、正規表現についての記事を書きました (http://www.jb51.net/article/111359.htm)この記事では、正則化について詳しく紹介していますが、ゼロ幅アサーションの導入についてはほとんど言及されていません。次に、このコンテンツを追加します。この記事では、主に次の問題を解決します:
① ゼロ幅アサーションとは何ですか? なぜゼロ幅アサーションを使用する必要があるのですか?
ゼロ幅アサーションは、ほとんどの場所でこのように定義され、特定のコンテンツの前後を検索するために使用されます (ただし、これらのコンテンツは含まれません)。つまり、b ^ $ < のようなアンカー機能があります。特定の条件 (つまりアサーション) を満たす必要がある位置を指定するために使用されるため、ゼロ幅アサーションとも呼ばれます。私の理解では、限られた位置で
stringの前後で一致検索を実行するということです。したがって、ゼロ幅アサーションの実行プロセスは 2 つの状況に分かれます。順方向アサーションの場合、最初のステップはアサーションが真であるかどうか (つまり、特定の条件を満たすかどうか) を判断することです。 2 番目のステップでは、条件が満たされた場合に次のステップに進みます。逆アサーションの場合、最初のステップは正規表現の順序で照合することです。 2 番目のステップは、逆承認に遭遇したときに逆承認が満たされるかどうかを判断することです。
肯定先読みアサーション肯定先読みアサーションとは、文字列内の対応する位置の前を検索して一致させ、exp の前の位置を一致させるには (?=exp) を使用します。
例
$str="abcgwcab"; $parent='/bc(?=gw)/'; $str=preg_match($parent,$str,$match); var_dump($match); /** 输出结果: int 1 array (size=1) 0 => string 'bc' (length=2) */
分析: まず、文字列「abcgwcab」内の gw 位置を見つけ、それが true であるとアサートし、次に bc と一致します。正規表現が $parent='/bc(?=gw)ca/' のように記述されている場合、一致は失敗します。
反先読みアサーション反先読みアサーションとは? exp が続かないものと一致させるには (?!exp) を使用します。
例:
$str="abcgwcab"; $parent='/bc(?!ww)gw/'; $str=preg_match($parent,$str,$match); var_dump($str); var_dump($match); /** 输出: int 1 array (size=1) 0 => string 'bcgw' (length=4) */
分析: まず文字列に bc が含まれているかどうかを判断し、次に ww が続くかどうかを判断し、最後に gw と一致します。逆アサーションの前後に他の一致条件を追加できることがわかります。
フロントアサーションとポストアサーションポストアサーションとは? 文字列内の対応する位置(?<=exp)がexp
の後の位置と一致した後で検索して照合することです。
$str="abcgwcab"; $parent='/(?<=gw)ca/'; $str=preg_match($parent,$str,$match); var_dump($str); var_dump($match); /** 输出结果: int 1 array (size=1) 0 => string 'ca' (length=2) */
分析: 最初のステップでは、文字「abcgwcab」に gw が含まれているかどうかを確認します。返された結果は true であり、次に 2 番目のステップに進み、gw の後に ca があるかどうかを確認します。
反事後アサーション反事後アサーションとは? 1 つは bc であるため、false を返します。
練習問題例 1: d+(?=abc)
文字列に 'abc' が含まれるかどうか、および文字列に 1 つ以上の数字が含まれるかどうかを判断します。前に
(?<=dd)w
文字列内に 2 つの連続する数字とその後に文字があるかどうかを判断しますd+(?=abc)
判断一个字符串中是否包含'abc',且其前面是否包含一个或多个数字
例2:(?<=dd)w
判断字符串中是否存在连续两个数字,且其后面包含一个字母
例3:d{3} (?!55)
判断字符串中是否包含连续三个数字,且三个数字后面不是55
例4:(?<!ac)wd
例 3: d{3 } ( ?!55)
例 4: (?<!ac)wd
文字列に文字と数字の組み合わせが含まれており、その前に ac が付いていませんか
概要
先読みアサーションと事後アサーションの違いは何ですか?はアサーションの前の正規表現であり、アサーションは他の正規表現の後にあり、アサーションはアサーションの前の正規表現であり、アサーションは他の正規表現の前にあります。正規表現内の他の一致するアサーションの例 PS: ここでは、参考のために 2 つの非常に便利な正規表現ツールを提供します:
http:/ /tools.jb51.net/regex/ javascript
正規表現オンライン生成ツール:
以上が正規表現のゼロ幅アサーション例の詳しい説明_正規表現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。