この記事では、正規表現のゼロ幅アサーションを中心に、ゼロ幅アサーションの概念、分類、PHP 実装スキル、および関連する注意事項を簡単に紹介します。必要な方は参考にしてください。
この記事の例では、正規表現。ゼロ幅アサーション。参考のために皆さんと共有してください。詳細は次のとおりです。
前書き
以前、正規表現についての記事を書きました (http://www.jb51.net/article/111359.htm)この記事では、正則化について詳しく紹介していますが、ゼロ幅アサーションの導入についてはほとんど言及されていません。次に、このコンテンツを追加します。この記事では、主に次の問題を解決します:
① ゼロ幅アサーションとは何ですか? なぜゼロ幅アサーションを使用する必要があるのですか?
コンセプト
ゼロ幅アサーションは、ほとんどの場所でこのように定義され、特定のコンテンツの前後を検索するために使用されます (ただし、これらのコンテンツは含まれません)。つまり、b ^ $ < のようなアンカー機能があります。特定の条件 (つまりアサーション) を満たす必要がある位置を指定するために使用されるため、ゼロ幅アサーションとも呼ばれます。私の理解では、一致検索は位置が限定された文字列の前後で実行されると考えています。したがって、ゼロ幅アサーションの実行プロセスは 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 があるかどうかを確認します。
反事後アサーション
反事後アサーションとは?前のものが bc であること bc であるため、false が返されます
練習問題例 1: d+(?=abc)
例 2: (?<=dd)w
文字列内に 2 つの連続する数字とその後に文字があるかどうかを判断します
例3:d {3} (?!55)
d+(?=abc)
判断一个字符串中是否包含'abc',且其前面是否包含一个或多个数字
例2:(?<=dd)w
判断字符串中是否存在连续两个数字,且其后面包含一个字母
例3:d{3} (?!55)
判断字符串中是否包含连续三个数字,且三个数字后面不是55
例4:(?<!ac)wd
文字列に 3 つの連続する数字が含まれており、その 3 つの数字の後に 55 が続いていないかどうかを判断します。 ac)wd
文字列に文字と数字の組み合わせが含まれており、その前に ac が付いていないかどうかを判断します
概要
先読みアサーションとフォローアサーションの違いは何ですか? up アサーション?
先読みアサーションはアサーションの前の正規表現です。アサーションはアサーションの前にある正規表現であり、アサーションは他の一致するアサーションの前にあります。正規表現では
です。以上が正規表現のゼロ幅アサーション例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。