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

时间:2019-02-27 16:22:04

标签: oracle regexp-like

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

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

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

尝试匹配任何符合以下条件的字段:

从ABC开始: 并以D,E或F结尾

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

但是,?Z是什么使我感到困惑。

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

1 个答案:

答案 0 :(得分:1)

尝试使用其他不同的弦乐演奏:

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。< / p>

因此,表达式的意思是“以Z开头的行,然后是D,E或F,并可选地以“ ABC:”开头。”