изменение разделителя подстроки в регулярном выражении не возвращает тот же результат - PullRequest
0 голосов
/ 19 марта 2019

У меня проблема с пониманием регулярного выражения.

У меня есть следующая строка:

aaa'dd? D'ххх '

В этой строке

является разделителем подстроки и

является escape-символом для

.

В 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']', '(.*?[^?])(''|$)');

В этом случае результат:

ааа

dd'd

ххх

... что правильно.

Моя проблема связана с тем, что я хочу изменить разделитель подстроки с

в

+

.

В этом случае основная строка становится

AAA + дд? + D + ххх +

Я изменил оператор 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+]', '(.*?[^?])(+|$)');

... и результат другой:

а

а

а

+

* * Д тысяча семьдесят-семь * * тысяча семьдесят восемь * * Тысяча семьдесят-девять д

? +

* +1083 * д * 1 084 *

+

х

х

х

+

Можете ли вы указать мне, что я делаю неправильно в моем измененном сценарии, чтобы получить тот же результат, пожалуйста?

1 Ответ

2 голосов
/ 19 марта 2019

В регулярном выражении + означает 1 или более из предыдущего шаблона.Попробуйте экранировать + с \, сделав свое регулярное выражение '(.*?[^?])(\+|$)'

...