Oracle
 sql >> база данни >  >> RDS >> Oracle

Regex101 срещу Oracle Regex

Проблемът е добре известен на всички, които са работили с имплементациите на библиотеката с регулярни изрази на Хенри Спенсър:мързеливите квантори не трябва да се смесват с алчни квантори в един и същ клон тъй като това води до недефинирано поведение. Механизмът за регулярни изрази TRE, използван в R, показва същото поведение. Въпреки че можете да смесвате мързеливите и алчните квантори до известна степен, винаги трябва да сте сигурни, че получавате последователен резултат.

Решението е да се използват само мързеливи квантори вътре в групата за улавяне:

select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual

Вижте онлайн демонстрация

[0-9]+?,[0-9]+? част съответства на 1 или повече цифри, но възможно най-малко пъти, последвано от запетая и след това 1 или повече цифри, възможно най-малко.

Още няколко теста (изберете REGEXP_REPLACE('+00009,010020','[0-9]+,[0-9]+?([1-9])','\1') от dual дава +20 ) докажете, че първият квантор в група задава типа алчност на квантора . В случая по-горе алчността на квантификатора от група 0 е зададена на алчен от първия ? квантор и група 1 (т.е. ([0-9]+?,[0-9]+?) ) типът на алчността се задава с първия +? (което е мързеливо).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Многоезична поддръжка в 11i/R12

  2. Блокирано извикване на недефинирана функция oci_connect() с помощта на XAMPP

  3. Как да свържете R към Oracle?

  4. Как да се справя със синонимите на Oracle с Flyway 2.0.1?

  5. Вземете последния идентификатор на вмъкване с Oracle 11g, използвайки JDBC