странное поведение функций регулярного выражения в Oracle 19c
Я не эксперт по регулярным выражениям, но по умолчанию должен быть чувствителен к регистру. Я пытаюсь понять, почему регулярное выражение дает мне первые 2 символа, когда первый - заглавный
select regexp_substr('JohnFoo','[a-z]{2}') from dual;
вывод - "Джо"
если бы я попробовал это
select regexp_substr('JohnFoo','^[a-z]{2}') from dual;
вывод такой же, но он должен распознавать 2 не заглавных буквы в начале, поэтому в этом случае совпадения нет
затем я попробовал то же самое со всеми аргументами
select regexp_substr('JohnFoo','[a-z]{2}',1,1,'c') from dual;
снова вывод "Jo" instrad "oh"
что я делаю не так? это то же поведение fot substr, также replace. мне кажется, что игнорировать столицы
1 ответ
Вы должны сначала проверить
NLS
настройка в вашей сессии. Ожидаемое поведение обеспечивается
BINARY
sort, который вы, вероятно, не назначили.
Ниже небольшой пример
ALTER SESSION SET NLS_COMP=BINARY;
ALTER SESSION SET NLS_SORT=BINARY;
select regexp_substr('JohnFoo','[a-z]{2}') from dual;
RE
--
oh
ALTER SESSION SET NLS_COMP=LINGUISTIC;
ALTER SESSION SET NLS_SORT=BINARY_CI;
select regexp_substr('JohnFoo','[a-z]{2}') from dual;
RE
--
Jo
Чтобы получить фактические значения сеанса, используйте запрос
select * from NLS_SESSION_PARAMETERS
where parameter in ('NLS_COMP','NLS_SORT');