加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:28:53 所属栏目:百科 来源:网络整理
导读:正则表达式中的加号是什么意思? 实际上可以有两个含义,具体取决于上下文. 像上面提到的其他答案一样,通常是一个repetition操作符,并使上一个令牌重复一次或多次. a将在formal language theory表示为aa *,也可以表示为{1,}(最少1次,最大无限次). 然而,如果遵
正则表达式中的加号是什么意思?
实际上可以有两个含义,具体取决于上下文.

像上面提到的其他答案一样,通常是一个repetition操作符,并使上一个令牌重复一次或多次. a将在formal language theory表示为aa *,也可以表示为{1,}(最少1次,最大无限次).

然而,如果遵循重复运算符(即,?,*或{m,n}),也可以使其他量词possessive.占有量词是一些正则表达式(PCRE,Java和JGsoft引擎)的高级功能,它告诉引擎一旦进行匹配就不会回溯.

为了理解它是如何工作的,我们需要了解正则表达式引擎的两个概念:贪婪和回溯.贪婪意味着一般来说,正则表达式将尽可能地消耗尽可能多的字符.假设我们的模式是*(dot是正则表达式的特殊构造,意思是任何character1;星号意味着匹配零次或更多次),您的目标是aaaaaaaab.整个字符串将被消耗,因为整个字符串是满足模式的最长匹配.

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

有限的量词也是贪心的,但如上所述,一旦他们返回比赛,发动机就不能再追溯到那一点了.所以如果我们将模式改为.* b(匹配任何字符零次或多次,占有率,后跟ab),并尝试匹配aaaaaaaab,再次.*将消耗整个字符串,但是由于它是占有性,回溯信息被丢弃,b不能匹配,因此模式失败.

1在大多数引擎中,除非指定了/ s(“singleline”或“dotall”)modifier,否则该点与换行符不匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读