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

Regex: regex match everything but specific pattern

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

例如,如果字符串是:

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

应该returnText1,Text2,Text#3

[^!#!] 也会匹配 Text#3 中的 #,这是我不想要的。

您可以使用积极的后视和前视来解决这个问题。

简单:

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

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

您可以将 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