正则表达式:正则表达式匹配除特定模式之外的所有内容
Regex: regex match everything but specific pattern
我需要一个正则表达式来查找字符串中 !#!
以外的值。
例如,如果字符串是:
Text1!#!Text2!#!Text#3!#!
应该returnText1
,Text2
,Text#3
[^!#!]
也会匹配 Text#3
中的 #
,这是我不想要的。
您可以使用积极的后视和前视来解决这个问题。
简单:
- 匹配任何内容
(.+?)
- 在文本开头或前面有模式
(?<=^|!#!)
- 并且位于文本末尾或后面有模式
(?=!#!|$)
在此处查看您的示例:https://rubular.com/r/f6BDr9CxeaQTIz 使用 (?<=^|!#!)(.+?)(?=!#!|$)
您可以将 REGEXP_SUBSTR
与 CONNECT_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
我需要一个正则表达式来查找字符串中 !#!
以外的值。
例如,如果字符串是:
Text1!#!Text2!#!Text#3!#!
应该returnText1
,Text2
,Text#3
[^!#!]
也会匹配 Text#3
中的 #
,这是我不想要的。
您可以使用积极的后视和前视来解决这个问题。
简单:
- 匹配任何内容
(.+?)
- 在文本开头或前面有模式
(?<=^|!#!)
- 并且位于文本末尾或后面有模式
(?=!#!|$)
在此处查看您的示例:https://rubular.com/r/f6BDr9CxeaQTIz 使用 (?<=^|!#!)(.+?)(?=!#!|$)
您可以将 REGEXP_SUBSTR
与 CONNECT_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