Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Regex101 so với Oracle Regex

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

Xem bản trình diễn trực tuyến

[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).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 cách để tìm hàng có chứa chữ thường trong Oracle

  2. Đặt thuộc tính V $ SESSION.program trên Glassfish JDBC Connection Pool

  3. No usename HR trong Oracle 12c

  4. Đã chỉ định URL Oracle không hợp lệ:OracleDataSource.makeURL

  5. Cách điền trường dấu thời gian với dấu thời gian hiện tại bằng Oracle Sql Loader