更改正则表达式中的子字符串分隔符,不会 return 相同的结果
changing the sub-string delimiter in a regex, does not return same result
我无法理解正则表达式。
我有以下字符串:
aaa'dd?'d'xxx'
在这个字符串中,
'
是子串分隔符,
?
是
的转义字符
'
.
在 Oracle SQL 中,我有一个句子根据子字符串定界符将我的字符串拆分为子字符串:
select replace(
regexp_substr(q'[aaa'dd?'d'xxx']', '(.*?[^?])(''|$)', 1, level, null, 1),
'?''',
'''') as result
FROM dual
connect by level <= regexp_count(q'[aaa'dd?'d'xxx']', '(.*?[^?])(''|$)');
在这种情况下,结果是:
aaa
dd'd
xxx
...正确。
我的问题是我想从
更改子字符串定界符
'
进入
+
.
在这种情况下,主字符串变为
aaa+dd?+d+xxx+
我修改了 SQL 中的语句:
SELECT REPLACE(
regexp_substr(q'[aaa+dd?+d+xxx+]', '(.*?[^?])(+|$)', 1, level, null, 1),
'?''',
'''') as result
FROM dual
connect by level <= regexp_count(q'[aaa+dd?+d+xxx+]', '(.*?[^?])(+|$)');
... 结果不同:
a
a
a
+
d
d
?+
d
+
x
x
x
+
你能指出我在修改后的脚本中做错了什么以获得相同的结果吗?
在正则表达式中 +
表示 1 个或多个前面的模式。尝试用 \
转义 +
使你的正则表达式 '(.*?[^?])(\+|$)'
我无法理解正则表达式。
我有以下字符串:
aaa'dd?'d'xxx'
在这个字符串中,
'
是子串分隔符,
?
是
的转义字符'
.
在 Oracle SQL 中,我有一个句子根据子字符串定界符将我的字符串拆分为子字符串:
select replace(
regexp_substr(q'[aaa'dd?'d'xxx']', '(.*?[^?])(''|$)', 1, level, null, 1),
'?''',
'''') as result
FROM dual
connect by level <= regexp_count(q'[aaa'dd?'d'xxx']', '(.*?[^?])(''|$)');
在这种情况下,结果是:
aaa
dd'd
xxx
...正确。
我的问题是我想从
更改子字符串定界符'
进入
+
.
在这种情况下,主字符串变为
aaa+dd?+d+xxx+
我修改了 SQL 中的语句:
SELECT REPLACE(
regexp_substr(q'[aaa+dd?+d+xxx+]', '(.*?[^?])(+|$)', 1, level, null, 1),
'?''',
'''') as result
FROM dual
connect by level <= regexp_count(q'[aaa+dd?+d+xxx+]', '(.*?[^?])(+|$)');
... 结果不同:
a
a
a
+
d
d
?+
d
+
x
x
x
+
你能指出我在修改后的脚本中做错了什么以获得相同的结果吗?
在正则表达式中 +
表示 1 个或多个前面的模式。尝试用 \
转义 +
使你的正则表达式 '(.*?[^?])(\+|$)'