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

正则表达式 – 非贪婪搜索和否定字符集之间的区别

发布时间:2020-12-14 06:23:10 所属栏目:百科 来源:网络整理
导读:这两个正则表达式模式之间是否有任何区别(假设启用了单行模式):a.*?b和a [^ b] * b?在性能方面呢? a.*?b必须检查每个消耗的字符是否与模式匹配(即,如果下一个是b).这称为回溯. 使用字符串a12b,执行将如下所示: 消费一个 使用以下0个字符.下一个是b吗?
这两个正则表达式模式之间是否有任何区别(假设启用了单行模式):a.*?b和a [^ b] * b?在性能方面呢?
a.*?b必须检查每个消耗的字符是否与模式匹配(即,如果下一个是b).这称为回溯.

使用字符串a12b,执行将如下所示:

>消费一个
>使用以下0个字符.下一个是b吗?没有.
>使用以下字符(a1).下一个是b吗?没有.
>使用以下字符(a12).下一个是b吗?是!
>消费b
>比赛

a [^ b] * b在没有问自己问题的情况下消耗任何不是b的东西,并且由于这个原因,对于更长的字符串来说要快得多.

使用字符串a12b,执行将如下所示:

>消费一个
>消费后面的任何不是b的东西. (A12)
>消费b
>比赛

RegexHero有一个基准测试功能,可以使用.NET正则表达式引擎进行演示.

除性能差异外,它们与示例中的相同字符串匹配.

但是,有些情况下两者之间存在差异.在字符串aa111b111b中

(?< = aa.*?)b匹配两个b而(?< = aa [^ b] *)b仅匹配第一个.

(编辑:李大同)

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

    推荐文章
      热点阅读