Регулярное выражение для проверки соответствиятестовое задание - PullRequest
2 голосов
/ 11 января 2011

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

Например, я хочу сопоставить «testZZZtest» и «testAAAtest», но ни «testABCtest», ни «test bla bla ABC bla bla test».

Я пробую шаблон 'test [^ ABC] * test "как в:

select regexp_instr('bla bla bla testAZZtest bla bla bla', 'test[^ABC]*test') from dual

но это не работает (он отвечает 0, что означает, что он не совпадает). Кажется, что «A» в «AZZ» является проблемой, потому что если я попытаюсь:

select regexp_instr('bla bla bla testZZZtest bla bla bla', 'test[^ABC]*test') from dual

Я получил ответ 13 - позиция testZZZtest в исходной строке.

Конечно, я что-то упускаю, но не могу найти проблему. Искал некоторую информацию о негативном прогнозе, но я получил синтаксис, который не работает в Oracle:

http://www.regular -expressions.info / lookaround.html

1 Ответ

2 голосов
/ 11 января 2011

Попробуйте это:

test([^A].*|.[^B].*|..[^C].*)test

В вашей попытке [^ABC]* соответствует 0 или более символам, которые не являются A, B или C. Это объясняет, почему он соответствует ZZZ (у которого нет A, B или C), но не AZZ (который имеет А).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...