Vấn đề nổi tiếng đối với tất cả những người đã làm việc với triển khai thư viện regex của Henry Spencer: không nên trộn lẫn các bộ định lượng lười biếng với các bộ định lượng tham lam trong một và cùng một nhánh vì điều đó dẫn đến hành vi không xác định. Công cụ regex TRE được sử dụng trong R cho thấy hành vi tương tự. Mặc dù bạn có thể kết hợp các bộ định lượng lười biếng và tham lam ở một mức độ nào đó, nhưng bạn phải luôn đảm bảo rằng bạn nhận được một kết quả nhất quán.
Giải pháp là chỉ sử dụng các bộ định lượng lười biếng bên trong nhóm thu thập:
select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual
[0-9] + ?, [0-9] +?
phần khớp với 1 hoặc nhiều chữ số nhưng ít nhất có thể theo sau dấu phẩy và sau đó là 1 hoặc nhiều chữ số, càng ít càng tốt.
Một số thử nghiệm khác ( select REGEXP_REPLACE ('+ 00009,010020', '[0-9] +, [0-9] +? ([1-9])', '\ 1') từ kép sản lượng
+20
) chứng minh rằng bộ định lượng đầu tiên trong nhóm đặt loại tham lam của bộ định lượng . Trong trường hợp trên, tính tham lam của bộ định lượng Nhóm 0 được đặt thành tham lam bởi ?
đầu tiên bộ định lượng và Nhóm 1 (tức là ([0-9] + ?, [0-9] +?)
) loại tham lam được đặt bằng +?
đầu tiên (lười biếng).