我正在查看别人的代码,我没有选择运行的代码,无法弄清楚以下REGEXP_LIKE试图匹配的内容。任何帮助将不胜感激。
REGEXP_LIKE('field_name', '^(ABC:)?Z[DEF]')
我认为正在发生的事情如下,但我认为我错了:
尝试匹配任何符合以下条件的字段:
从ABC开始: 并以D,E或F结尾
我知道^匹配字符串的开头,并且()括号将表达式分组,因此将ABC分组:
但是,?Z是什么使我感到困惑。
任何帮助将不胜感激,无论我读了多少篇文章,我似乎都无法解决这个问题。
答案 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:”开头。”