アサーションは、現在の一致位置の前後の文字をテストするものであり、実際には文字を消費しません。単純なアサーション コードには、b、B、A、Z、z、^、$ などが含まれます。 より複雑なアサーションはサブグループにコーディングされます。 これには、先読みアサーション (現在位置から前方にテスト) と後読みアサーション (現在位置から逆方向にテスト) の 2 つのタイプがあります。
アサーション サブグループのマッチングは引き続き通常の方法で実行されますが、異なる点は、現在のマッチング ポイントが変更されないことです。先読みアサーションの肯定的なアサーション (この一致が true であることのアサート) は「(?=」で始まり、否定的なアサーションは「(?!」で始まります。たとえば、w+(?=;) はセミコロンが後に続く単語と一致しますが、一致します。結果にはセミコロンは含まれません。 foo(?!bar) は、直後に「bar」が続かないすべての「foo」の出現に一致します。同様のパターン (?!foo)bar を使用して、すべての出現を検索することはできません。 「bar」が前にないものは「bar」と一致します。次の 3 文字が「bar」の場合、アサーション (?!foo) は常に TRUE になるため、「bar」の出現が検索されます。
後読みアサーションの肯定的なアサーションは「(?
この場合、最初のアサーションは、(現在の一致点) の最初の 6 文字をチェックし、最初の 3 文字が数字であることを確認し、次に 2 番目のアサーションは、(現在の一致点) の最初の 3 文字が「」ではないことを確認します。 999」。
アサーションは、任意の複雑さでネストできます。 たとえば、(?<=(?
アサーション サブグループは非キャプチャ サブグループであり、量指定子を使用して変更できません。すべてのアサーションにキャプチャ サブグループが含まれている場合、パターン全体でサブグループをキャプチャするには、For を使用する必要があるためです。グループのカウントの目的では、それらはすべてカウントされます。ただし、部分文字列キャプチャは、否定的なアサーションには意味がないため、肯定的なアサーションにのみ使用できます。
アサーションを含め、保持できるサブグループの最大数は 200 です。