2011-01-10 107 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

相關問題