gpt4 book ai didi

regex - `?` 在这个 Perl 正则表达式中是什么意思?

转载 作者:行者123 更新时间:2023-12-04 16:15:43 25 4
gpt4 key购买 nike

我有一个 Perl 正则表达式。但我不确定是什么“?”在这种情况下意味着。

m#(?:\w+)#

什么?这里的意思?

最佳答案

在这种情况下,?实际上与 : 一起使用.放在一起,?:在分组的开头意味着分组但不捕获括号内的文本/模式(例如,它不会存储在任何反向引用中,如 \1$1 ,因此您将无法访问分组直接发文)。

更具体地说,一个 ?在正则表达式中具有三个不同的含义:

  • ?量词表示表达式的“零次或一次重复”。我见过的规范示例之一是 s?he这将匹配 shehe?使 s “可选”
  • 当量词( +*? 或一般的 {n,m} )后跟 ? 时那么匹配是非贪婪的(即它将匹配从允许匹配继续的那个位置开始的最短字符串)
  • 一个 ?在括号组的开头表示您要执行特殊操作。在这种情况下,:意味着分组而不是捕获。从一个正则表达式引擎到另一个,可用操作的确切列表会有所不同,但这里是其中一些的列表(不一定包含所有内容):

    A. Non-capturing group :(?:text) B. Lookaround :(?=a)展望 future ,?!对于负前瞻,或 ?<=?<!用于后视(分别为正面和负面)。
    C. Conditional Matches :(?(condition)then|else) .
    D. Atomic Grouping :a(?>bc|b)c (匹配 abcc 但不匹配 abc ;见链接)
    E. Inline enabling/disabling of regex matching modifiers :?i启用模式,?-i禁用。您还可以通过简单地连接来一次启用/禁用多个修饰符,例如 ?im ( i 不区分大小写, m 是多行)。
    F. Named capture groups :(?P<name>pattern) ,稍后可以使用 (?P=name) 引用. .NET 正则表达式引擎使用语法 (?<name>pattern)反而。
    G. Comments :(?#Comment text) .我个人认为这只会增加困惑,但我想它可以起到一些作用... free-spacing mode可能是更好的选择((?x) 修饰符)。

  • 所以本质上, ? 的目的只是上下文。如果您想要零次或多次重复文字 (您必须使用的字符 \(?逃避 parent 。

    关于regex - `?` 在这个 Perl 正则表达式中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3890739/

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