更改正则表达式中的子字符串分隔符,不会 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 个或多个前面的模式。尝试用 \ 转义 + 使你的正则表达式 '(.*?[^?])(\+|$)'