正则表达式匹配测试<not abc =“”> test </not>

时间:2011-01-10 21:24:57

标签: regex oracle lookahead

我正在使用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中不起作用:

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

1 个答案:

答案 0 :(得分:2)

试试这个:

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

在您的尝试中,[^ABC]*匹配0个或更多不是A,B或C的字符。这解释了为什么它匹配ZZZ(没有A,B或C)而不是AZZ {1}}(有A)。