この問題は、Henry Spencerの正規表現ライブラリの実装を使用したすべての人によく知られています。1つの同じブランチで、怠惰な数量詞を貪欲な数量詞と混同しないでください それは未定義の振る舞いにつながるからです。 Rで使用されるTRE正規表現エンジンは同じ動作を示します。怠惰な数量詞と貪欲な数量詞をある程度混ぜることはできますが、常に一貫した結果が得られるようにする必要があります。
解決策は、キャプチャグループ内で遅延数量詞のみを使用することです。
select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual
オンラインデモ をご覧ください。
[0-9] +?、[0-9] +?
パーツは1桁以上に一致しますが、可能な限り少ない回数で、その後にコンマが続き、次に1桁以上が可能な限り少なくなります。
デュアルからさらにいくつかのテスト( select REGEXP_REPLACE('+ 00009,010020'、'[0-9] +、[0-9] +?([1-9])'、'\ 1')コード>
+20
を生成します )グループの最初の数量詞であることを証明します 数量詞の貪欲タイプを設定します 。上記の場合、グループ0の数量詞の欲張りは欲張りに設定されます。 最初の?
数量詞、およびグループ1(つまり、([0-9] + ?, [0-9] +?)
)貪欲タイプは最初の +?
で設定されます (怠惰です)