Oracle SQL Регулярное выражение RegExp_SubStr Конец строки (chr (10) в тексте поиска возвращает ноль) - PullRequest
4 голосов
/ 03 марта 2020

Я пытаюсь получить указанную c часть текста с Oracle регулярным выражением. Если в тексте нет символа конца строки (chr(10)), я получаю то, что хочу. Но если есть символ конца строки, он возвращает ноль. Вы можете увидеть примеры sql кодов ниже.

SELECT RegExp_SubStr('TEXT_BEGIN Line 1 Line 2 TEXT_END',  
                     'TEXT_BEGIN(.+)TEXT_END', 1, 1, NULL, 1) 
  FROM dual;

возвращает Line 1 Line 2

с символом конца строки.

SELECT RegExp_SubStr('TEXT_BEGIN Line 1' || chr(10) || 'Line 2 TEXT_END', 
                     'TEXT_BEGIN(.+)TEXT_END', 1, 1, NULL, 1) 
    FROM dual;

возвращает NULL

Это может быть решение для преобразования символов конца строки в тексте в специальный символ, такой как ## CHR10 ## до SubStr и затем после SubStr. Но я хочу простое решение без взлома.

1 Ответ

3 голосов
/ 03 марта 2020

По умолчанию точка не соответствует символу новой строки.

Пятый аргумент regexp_substr (в вашем примере это NULL) используется для нескольких модификаторов. Одним из них является 'n', чтобы точка соответствовала символу новой строки.

Итак, это действительно просто: измените пятый аргумент с NULL на 'n'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...