I need a regex that finds values other than !#! in a string.
If, for example, the string were:
Text1!#!Text2!#!Text#3!#!
it should return Text1, Text2, Text#3
[^!#!] would match the # in Text#3 as well, which I don't want.
I need a regex that finds values other than !#! in a string.
If, for example, the string were:
Text1!#!Text2!#!Text#3!#!
it should return Text1, Text2, Text#3
[^!#!] would match the # in Text#3 as well, which I don't want.
You could solve this problem using positive lookbehind and lookahead.
Simply:
(.+?)(?<=^|!#!)(?=!#!|$)See your example here: https://rubular.com/r/f6BDr9CxeaQTIz using (?<=^|!#!)(.+?)(?=!#!|$)
You can use REGEXP_SUBSTR in conjunction with CONNECT_BY to split the string into words separated by !#!. We use the regex:
(.*?)(!#!|$)
which matches some number of characters lazily until it encounters either !#! or the end of string ($).
For example:
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
Output:
VAL
Text1
Text2
Text#3