2

我正在使用 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,这意味着它不匹配)。似乎“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

4

1 回答 1

2

试试这个:

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

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

于 2011-01-10T21:31:01.500 回答