Oracle正则表达式 - 不是以 - 也不是以...结尾

时间:2013-06-13 19:36:58

标签: regex oracle

以下Oracle正则表达式不起作用,我不知道原因。

“不以' abc '开头”:

^[^(abc)]

“不以' abc '结尾”:

[^(abc)]$

问题是Oracle正则表达式引擎似乎不会将'abc'字符串识别为一个单元,而只是单独查看字母。括号()应该创建一个字符串单元。所以我不知道发生了什么。我只使用方括号,因为我认为'not'运算符^仅在括号内运行,否则^被识别为行首。

供参考: http://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm

2 个答案:

答案 0 :(得分:4)

对这样的非匹配进行测试会变得复杂,所以我建议测试匹配并否定结果。

不以abc开头:

WHERE NOT REGEXP_LIKE(myString, '^abc')

不以abc结尾:

WHERE NOT REGEXP_LIKE(myString, 'abc$')

至于为什么它不起作用,正如@DavidKnipe在他的回答中所说:这是因为你正在使用角色类。正则表达式^[^(abc)]解析出如下:

  • 第一个^表示“锚定到字符串的开头”
  • 只要[^(abc)](abc“。

答案 1 :(得分:0)

用于否定的^运算符仅适用于字符类。但是你不应该使用字符类。我不知道Oracle正则表达式是否允许外观操作(前瞻和后瞻)。如果有,请使用^(?!abc)(?<!abc)$