以下Oracle正则表达式不起作用,我不知道原因。
“不以' abc '开头”:
^[^(abc)]
“不以' abc '结尾”:
[^(abc)]$
问题是Oracle正则表达式引擎似乎不会将'abc'字符串识别为一个单元,而只是单独查看字母。括号()应该创建一个字符串单元。所以我不知道发生了什么。我只使用方括号,因为我认为'not'运算符^仅在括号内运行,否则^被识别为行首。
供参考: http://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm
答案 0 :(得分:4)
对这样的非匹配进行测试会变得复杂,所以我建议测试匹配并否定结果。
不以abc
开头:
WHERE NOT REGEXP_LIKE(myString, '^abc')
不以abc
结尾:
WHERE NOT REGEXP_LIKE(myString, 'abc$')
至于为什么它不起作用,正如@DavidKnipe在他的回答中所说:这是因为你正在使用角色类。正则表达式^[^(abc)]
解析出如下:
^
表示“锚定到字符串的开头”[^(abc)]
或(
或a
或b
或c
“。答案 1 :(得分:0)
用于否定的^
运算符仅适用于字符类。但是你不应该使用字符类。我不知道Oracle正则表达式是否允许外观操作(前瞻和后瞻)。如果有,请使用^(?!abc)
和(?<!abc)$
。