Функция Oracle REGEXP_LIKE - что это за совпадение? - PullRequest
0 голосов
/ 27 февраля 2019

Я смотрю на чужой код, который не могу запустить, и не могу понять, что пытается сопоставить следующий REGEXP_LIKE.Мы будем благодарны за любую помощь.

REGEXP_LIKE('field_name', '^(ABC:)?Z[DEF]')

Я думаю, что происходит следующее, но я ошибаюсь:

Попробуйте сопоставить любое поле, которое начинается:

с ABC: и заканчивается D, E или F

Я понимаю, что ^ соответствует началу строки и что скобки () группируют выражения, поэтому группирует ABC:

Однако«Z - это то, что меня смущает.

Любая помощь будет принята с благодарностью, кажется, я не могу разобраться в этом, независимо от того, сколько статей я прочитал.

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуйте поиграть с разными строками:

with example as (select 'BC:ZDEF' as x from dual
           union select 'ABC:D' from dual
           union select 'ABC:ZE' from dual
           union select 'ZE' from dual
           union select 'ZF' from dual)
select x
from example
where REGEXP_like(x, '^(ABC:)?Z[DEF]');

Вывод:

x
ABC:ZE
ZE
ZF

Так что же происходит?Вы правы насчет ^, означающего начало строки.Оператор ? означает the thing that comes before this is optional - it should occur 1 or 0 times.В данном случае это (ABC:), так что часть строки является необязательной.

Затем у нас есть Z, который является обязательным, за которым следует выражение в скобках, что означает любой отдельный символуказан в скобках - так что либо D, E, либо F.

Таким образом, выражение означает «строку, начинающуюся с Z, за которой следуют D, E или F, необязательно с« ABC: »вначало ".

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