我对理解正则表达式有疑问。
我有以下字符串:
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
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
+
能否请我指出修改后的脚本在做什么,以获取相同的结果?
答案 0 :(得分:2)
在正则表达式+
中表示1个或多个前面的模式。尝试使用+
转义\
,使您的正则表达式'(.*?[^?])(\+|$)'