2016-04-26 3 views
1

У меня есть следующее выражение, которое соответствует строке, указанной при тестировании с помощью Online Regex Tester (https://regex101.com/).Нет строк, возвращаемых REGEXP_LIKE

Expression:

^(?:[A-Z]{3}[0-9]{3}[a-z]{1}\([0-9]{1,3}\-[0-9]{1,3}\))\+\s?(?:[A-Z]{2}\((?:[0-9]{1,3}((?:\-[0-9]{1,3}(?:\s?\,\s?)?))?)+\)(?:\s?\+\s?)?)*$ 

Строка ввода:

ATL107j(1-132)+XD(133-156)+SP(157-288)+XD(289-432)

Если я использую:

SELECT 1 FROM DUAL WHERE REGEXP_LIKE([String Input], [Expression])

я не получаю ни одной строки. Я не уверен, что не так с выражением, которое связано с REGEXP_LIKE. Я использую Oracle 11gR2.

Любая помощь приветствуется. Спасибо.

+1

, когда я попробовал выражение с вводом на тестовом сайте, я не получаю совпадения. Возможно, вы что-то пропустили? – cableload

+1

То же, что и выше ... нет соответствия! – Max

+1

Упс. Сожалею. Скопировано неправильное выражение. Вот правильный, который должен работать с этим строковым вводом на тестовом сайте. Спасибо за проверку:^(?: [AZ] {3} [0-9] {3} [az] {1} \ ([0-9] {1,3} \ - [0-9] { 1,3} \)) \ + \ с (: [AZ] {2} \ ((: [0-9] {1,3} ((:??? \ - [0-9] {1, 3} (?: \ S? \, \ S?)?))?) + \) (?: \ S? \ + \ S?)?) * $ – anteater

ответ

1

Что такое ?: сразу после открытой круглой скобки, как в (?: ...)? Это не в духе Oracle regex; если вы удалите все?: пары, запрос вернет одну строку. В Oracle, то: принимаются буквально:

SQL> select 1 from dual where regexp_like('?:', '(?:)'); 

     1 
---------- 
     1 
1 row selected. 

Вы должны использовать регулярное выражение функции из другого вкуса, не поддерживается Oracle.

+0

) Спасибо mathguy. Я нашел то же самое. Группы захвата, похоже, не поддерживаются Oracle. – anteater

+0

На самом деле да, Oracle поддерживает группы захвата, просто с другим синтаксисом. 'Select regexp_substr ('abc-02-e', '^ ([az] +) - (\ d +) -.* $ ', 1, 1, null, 2) из ​​double; 'возвращает вторую группу захвата' 02 '(см. Документацию для regexp, здесь последний аргумент 2 указывает, какую группу захвата следует вернуть). – mathguy

+0

Ах! Удивительно, спасибо еще раз! – anteater

Смежные вопросы