gpt4 book ai didi

regex - 正则表达式中的 + 是什么意思?

转载 作者:行者123 更新时间:2023-12-03 09:00:13 24 4
gpt4 key购买 nike

正则表达式中的加号是什么意思?

最佳答案

+根据上下文,实际上可以有两种含义。

就像提到的其他答案一样,+通常是 repetition运算符,并使前面的标记重复一次或多次。 a+将表示为 aa*formal language theory ,也可以表示为 a{1,} (最少匹配 1 次,最多匹配无限次)。

然而,+也可以做其他量词possessive如果它跟在重复运算符之后(即 ?+*+++{m,n}+ )。占有量词是一些正则表达式(PCRE、Java 和 JGsoft 引擎)的高级功能,它告诉引擎一旦匹配完成就不要回溯。

要了解其工作原理,我们需要了解正则表达式引擎的两个概念:贪婪和回溯。贪婪意味着通常正则表达式会尝试使用尽可能多的字符。假设我们的模式是 .* (dot 是正则表达式中的一个特殊结构,表示任何字符 1;星号表示匹配零次或多次),您的目标是 aaaaaaaab .将消耗整个字符串,因为整个字符串是满足模式的最长匹配项。

但是,假设我们将模式更改为 .*b .现在,当正则表达式引擎尝试匹配 aaaaaaaab 时, .*将再次消耗整个字符串。但是,由于引擎将到达字符串的末尾并且模式尚未满足(.* 消耗了所有内容,但模式之后仍然必须匹配 b),它将回溯,一次一个字符,并尝试匹配 b .第一次回溯将使 .*消费 aaaaaaaa ,然后 b可以消费b ,并且模式成功。

占有量词也是贪婪的,但如前所述,一旦它们返回匹配项,引擎就不能再回溯到那个点。因此,如果我们将模式更改为 .*+b (匹配任何字符零次或多次,所有格,后跟 b ),并尝试匹配 aaaaaaaab ,又是 .*将消耗整个字符串,但由于它是所有格,回溯信息被丢弃,并且 b 无法匹配,因此模式失败。

1 在大多数引擎中,点不会匹配换行符,除非 /s (“单行”或“dotall”)modifier被指定。

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

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