首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex -在行开始后或在特定字符之后进行匹配的最有效表达式

Regex -在行开始后或在特定字符之后进行匹配的最有效表达式
EN

Stack Overflow用户
提问于 2018-08-16 09:00:35
回答 1查看 47关注 0票数 0

我试图找到最有效的方式匹配字符后,行或后面的另一个字符。

匹配准则

ad([sxv])?[0-9]*[-_.] -需要在^之后或[-_.]之后立即找到匹配项。

注意:我不能100%确定处理器使用哪种正则表达式,但它似乎不支持非捕获组。

场景:

用户尝试访问一个域,然后根据几个regex表达式(包括本例)检查该域。如果没有找到匹配项,则允许访问。

示例用户输入(将被阻止):

代码语言:javascript
复制
ad.dailymail.co.uk
asdsa.adasdsa.dasdasd.asdasdasd.dasdasdsa.ad.test.com

Regex测试:

ad.dailymail.co.uk

  • (^|[-_.])ad([sxv])?[0-9]*[-_.] - 13步
  • ^(.*[-_.])?ad([sxv])?[0-9]*[-_.] - 36步
  • ^([a-z0-9]([a-z0-9-]*[a-z0-9])?[-_.])*ad([sxv])?[0-9]*[-_.] - 69步

asdsa.adasdsa.dasdasd.asdasdasd.dasdasdsa.ad.test.com

  • (^|[-_.])ad([sxv])?[0-9]*[-_.] -151个步骤
  • ^(.*[-_.])?ad([sxv])?[0-9]*[-_.] - 28步
  • ^([a-z0-9]([a-z0-9-]*[a-z0-9])?[-_.])*ad([sxv])?[0-9]*[-_.] - 86步

到目前为止,看起来^(.*[-_.])?ad([sxv])?[0-9]*[-_.]似乎是最有效的,但是还有其他方法可以更快地检查吗?

另外,有人能告诉我为什么(^|[-_.])比其他表达式消耗这么多步骤吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 09:38:25

您可以修改第二个正则表达式,以便为第一个组使用??修饰符。所以如果你已经找到“广告.”,它会懒洋洋地停在0次。刚开始的时候。

演示

它的步骤甚至比第一个regexp (它是最快的)更少(9比10步)

缺点是,对于任何“非广告”urls,可能会变得更糟(0-2额外步骤)。它还将取决于它是否匹配。如果不匹配,则两个正则表达式具有相同的步骤。如果他们匹配,它可能有1-2个额外的步骤。

你可以做你的数学,计算这类类型的网址数目,并根据概率来决定。

最后,我制作了一个包含所有结果的表:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51873306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档