Oracle REGEXP_LIKE 函数 - 这是什么匹配?

Oracle REGEXP_LIKE function - what is this matching?

我正在查看别人的代码,我没有 运行 的选项,也无法弄清楚下面的 REGEXP_LIKE 试图匹配什么。任何帮助将不胜感激。

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

我认为正在发生的事情如下,但我认为我错了:

尝试匹配任何字段:

以 ABC 开头: 以 D、E 或 F

结尾

我知道 ^ 匹配字符串的开头,并且 () 括号对表达式进行分组,因此对 ABC 进行分组:

然而,让我感到困惑的是?Z。

任何帮助将不胜感激,无论我阅读了多少文章,我似乎都无法理解这个问题。

尝试使用一些不同的字符串:

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.

所以表达式的意思是"a line starting with Z followed by D, E, or F, optionally with an "ABC:"开头"。