2011-01-10 105 views
2

我正在使用Oracle regural表达式,我想匹配一些字符串,然后与另一个字符串然后另一个字符串不同。正则表达式匹配测试<not ABC>测试

例如,我想匹配'testZZZtest'和'testAAAtest',但没有'testABCtest'也没有'测试bla bla ABC bla bla test'。

我想模式 '测试[^ ABC] *测试' 中:

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 

我是testZZZtest在原来的字符串位置的答案13。

当然,我错过了一些东西,但我找不到问题。看着约负向前查找一些信息,但我得到了一个语法不甲骨文工作:

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

+0

除非Oracle发明了自己的正则表达式语法,`[^ ...]`是否定字符组,即匹配一个未指定的字符来代替省略号。 – delnan 2011-01-10 21:29:04

回答

2

试试这个:

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

在你尝试,[^ABC]*匹配0或多个字符不是A,B或C.这解释了为什么它匹配ZZZ(它没有A,B或C),但不是AZZ(它有一个A)。

+0

它不工作:(,不符合testAZZtest。 – caraca 2011-01-10 21:33:37

相关问题