【问题标题】:Oracle REGEXP_LIKE function - what is this matching?Oracle REGEXP_LIKE 函数 - 这是什么匹配?
【发布时间】:2019-07-21 10:33:29
【问题描述】:

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

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

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

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

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

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

但是 ?Z 让我感到困惑。

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

【问题讨论】:

    标签: oracle regexp-like


    【解决方案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:”开头”。

    【讨论】:

    • 非常感谢,这很有帮助
    猜你喜欢
    • 2015-05-30
    • 2017-10-24
    • 2012-12-06
    • 1970-01-01
    • 2020-08-28
    • 2021-11-19
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多