我正在使用Oracle regural表达式,我希望匹配一些字符串,然后匹配另一个字符串,然后是另一个字符串。
例如,我想匹配'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,这意味着它不匹配)。似乎'AZZ'中的'A'是问题,因为如果我尝试:
select regexp_instr('bla bla bla testZZZtest bla bla bla', 'test[^ABC]*test') from dual
我得到了答案13,这是testZZZtest在原始字符串中的位置。
当然我错过了什么,但我找不到问题。查看有关负前瞻的一些信息,但我得到的语法在Oracle中不起作用:
答案 0 :(得分:2)
试试这个:
test([^A].*|.[^B].*|..[^C].*)test
在您的尝试中,[^ABC]*
匹配0个或更多不是A,B或C的字符。这解释了为什么它匹配ZZZ
(没有A,B或C)而不是AZZ
{1}}(有A)。