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

前端之家收集整理的这篇文章主要介绍了正则表达式 – 非贪婪搜索和否定字符集之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这两个正则表达式模式之间是否有任何区别(假设启用了单行模式):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仅匹配第一个.

猜你在找的正则表达式相关文章