gpt4 book ai didi

regex - 正则表达式中的运算符优先级

转载 作者:行者123 更新时间:2023-12-04 13:31:18 26 4
gpt4 key购买 nike

当 Oracle 的正则表达式不包含括号时,它们的默认运算符优先级是什么?

例如,给定

 H|ha+

它会被评估为 H|h然后连接到 a((H|h)a) , 或者 Hha 交替使用如 (H|(ha)) ?

另外, + 什么时候出现?踢,等等?

最佳答案

使用捕获组来演示评估顺序,正则表达式 H|ha+等效于以下内容:

(H|(h(a+)))

这是因为优先级规则(如下所示)按照从最高优先级(编号最小)到最低优先级(编号最高)的顺序应用:
  • 规则 5 → (a+) +a 分组因为此运算符适用于前面的单个字符、反向引用、组(Oracle 用语中的“标记子表达式”)或括号表达式(字符类)。
  • 规则 6 → (h(a+)) h然后在前面的步骤中与组连接。
  • 规则 8 → (H|(h(a+))) H然后与上一步中的组交替。



  • 9.4.8 of the POSIX docs for regular expressions 部分的优先级表(似乎没有官方的 Oracle 表):
    +---+----------------------------------------------------------+
    | | ERE Precedence (from high to low) |
    +---+----------------------------------------------------------+
    | 1 | Collation-related bracket symbols | [==] [::] [..] |
    | 2 | Escaped characters | \<special character> |
    | 3 | Bracket expression | [] |
    | 4 | Grouping | () |
    | 5 | Single-character-ERE duplication | * + ? {m,n} |
    | 6 | Concatenation | |
    | 7 | Anchoring | ^ $ |
    | 8 | Alternation | | |
    +---+-----------------------------------+----------------------+

    上表适用于扩展正则表达式。基本正则表达式见 9.3.7 .

    关于regex - 正则表达式中的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870168/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com