0

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

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

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

尝试匹配以下任何字段:

以 ABC 开头:以 D、E 或 F 结尾

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

然而 ?Z 让我感到困惑。

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

4

1 回答 1

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。

因此,该表达式的意思是“以 Z 开头的行,后跟 D、E 或 F,可以选择在开头使用“ABC:””。

于 2019-02-27T16:45:18.510 回答