正则表达式:除特定模式外,正则表达式匹配所有内容

时间:2020-06-25 05:16:53

标签: regex oracle regex-negation

我需要一个正则表达式来查找字符串中!#!以外的值。

例如,如果字符串为:

Text1!#!Text2!#!Text#3!#!

它应该返回Text1Text2Text#3

[^!#!]也将与#中的Text#3相匹配,这是我不希望的。

2 个答案:

答案 0 :(得分:0)

您可以使用正向后看和向前看来解决此问题。

简单地:

  • 匹配(.+?)
  • 位于文本开头或前面(?<=^|!#!)有图案
  • 并且位于文本的末尾或在(?=!#!|$)后面具有模式

在此处查看您的示例:https://rubular.com/r/f6BDr9CxeaQTIz使用(?<=^|!#!)(.+?)(?=!#!|$)

答案 1 :(得分:0)

您可以将REGEXP_SUBSTRCONNECT_BY结合使用,以将字符串分割成由!#!分隔的单词。我们使用正则表达式:

(.*?)(!#!|$)

,它会延迟匹配一些字符,直到遇到!#!或字符串结尾($)。

例如:

SELECT REGEXP_SUBSTR ('Text1!#!Text2!#!Text#3!#!',
                      '(.*?)(!#!|$)',
                      1,
                      LEVEL,
                      '',
                      1)
              AS VAL
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('Text1!#!Text2!#!Text#3!#!',
                          '(.*?)(!#!|$)',
                          1,
                          LEVEL,
                          '',
                          1)
IS NOT NULL

输出:

VAL
Text1
Text2
Text#3

Demo on dbfiddle