Regex Oracle正则表达式-不以开头,也不以结尾

Regex Oracle正则表达式-不以开头,也不以结尾,regex,oracle,Regex,Oracle,下面的Oracle正则表达式不起作用,我不知道为什么 “不以'abc'开头”: “不以‘abc’结尾”: 问题在于Oracle正则表达式引擎似乎无法将“abc”字符串识别为一个单元,而只是单独查看字母。括号()用来创建字符串单位。所以我不知道发生了什么。我之所以使用方括号,是因为我相信“not”运算符^只在括号内操作,否则^被认为是行的起点 供参考: 像这样的非匹配测试可能会变得复杂,所以我建议测试匹配并否定结果 不以abc开头: WHERE NOT REGEXP_LIKE(myString,

下面的Oracle正则表达式不起作用,我不知道为什么

“不以'abc'开头”:

“不以‘abc’结尾”:

问题在于Oracle正则表达式引擎似乎无法将“abc”字符串识别为一个单元,而只是单独查看字母。括号()用来创建字符串单位。所以我不知道发生了什么。我之所以使用方括号,是因为我相信“not”运算符^只在括号内操作,否则^被认为是行的起点

供参考:

像这样的非匹配测试可能会变得复杂,所以我建议测试匹配并否定结果

不以abc开头:

WHERE NOT REGEXP_LIKE(myString, '^abc')
WHERE NOT REGEXP_LIKE(myString, 'abc$')
不以abc结尾:

WHERE NOT REGEXP_LIKE(myString, '^abc')
WHERE NOT REGEXP_LIKE(myString, 'abc$')

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

  • 第一个
    ^
    表示“锚定到字符串的开头”
  • [^(abc)]
    是一个字符类,表示“匹配任何单个字符,只要它不是
    a
    b
    c

    • 像这样的非匹配测试可能会变得复杂,因此我建议测试匹配并否定结果

      不以abc开头:

      WHERE NOT REGEXP_LIKE(myString, '^abc')
      
      WHERE NOT REGEXP_LIKE(myString, 'abc$')
      
      不以abc结尾:

      WHERE NOT REGEXP_LIKE(myString, '^abc')
      
      WHERE NOT REGEXP_LIKE(myString, 'abc$')
      

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

      • 第一个
        ^
        表示“锚定到字符串的开头”
      • [^(abc)]
        是一个字符类,表示“匹配任何单个字符,只要它不是
        a
        b
        c

      求反的
      ^
      运算符仅适用于字符类。但是你不应该使用角色类。我不知道Oracle正则表达式是否允许lookaround操作(lookahead和lookback)。如果是,请使用
      ^(?abc)
      (?。

      求反的
      ^
      运算符仅适用于字符类。但您不应该使用字符类。我不知道Oracle正则表达式是否允许环顾操作(向前看和向后看)。如果允许,请使用
      ^(?abc)
      (?。

      请尝试:([^A]..[^B].*.[^C]@parzival aabbcc不适用于您的正则表达式,我认为它应该适用于OP。请尝试:([^A].[^B].[^C].@parzival aabbcc不适用于您的正则表达式,我认为它应该适用于OP。不幸的是,它们不适用于OP。不幸的是,它们不适用于OP。