、拡張正規表現にマッチするのregcompとregexecはCの関数を使用して "(()| ABC)XYZ"、私が見つけます文字列 "abcxyz"に一致しますが、オフセット3からオフセット6までです。私の期待は、文字列全体が一致し、文字列の最初の "abc"部分のサブダッチが表示されることです。期待される動作:(()| ABC)XYZ私のOS X 10.5.8マシンで
私は、同じマシン上のawkと同じパターンとテキストをしようとすると、私は期待するとして、それは文字列全体の一致を示しています。
私は限られた正規表現の使用経験が問題になると思います。誰かが何が起こっているか説明できますか?私の正規表現は有効ですか?もしそうなら、なぜそれは文字列全体と一致しませんか?
「((abc){0,1})xyz」は代替として使用できますが、別のパターン形式から自動的に生成され、「()」のインスタンスを削除することは余分です私は可能な限り回避したいと思います。
私がregcompに渡しているフラグは、REG_EXTENDEDのみで構成されています。私はregexecにフラグ(0)の空のセットを渡します。あなたはすべての一致を反復処理し、両方を取得[3,6)と[0,6)していない場合は
「(abc |())xyz」を試してみることができますか? – Artelius
'(abc)? 'を使用すると動作し、使用した時間よりも短くなります。 –
これは本当にUBかバグかに関心がありません。 '((c)| abc)xyz'を試して、それがどの範囲に一致するか見てみることができますか?私はジョナサンが今回は正しかったと思うが、OSXで学んだことは、実装がバグである可能性を最初に考えることが賢明だ... –