正则表达式使用中常见问题

1. 语法问题

当正则表达式中出现“++”,正则匹配会抛异常,具体原因不是很情况,好像是进入到了一个死循环当中,并在网上找到这样一段描述:++ Quantifier — Matches between one and unlimited times, as many times as possible, without giving back

 

2. 效率问题

写得不好的正则表达式可能会导致正则表达式引擎耗费大量的时间在回溯上,达到输入长度的指数级,在编辑正则表达式时应该尽量使用明白的规则,少使用模糊匹配,从而提高匹配效率;

正则表达式是一个很方便的匹配符号,但要实现这么复杂,功能如此强大的匹配语法,就必须要有一套算法来实现,而实现这套算法的东西就叫做正则表达式引擎。简单地说,实现正则表达式引擎的有两种方式:DFA 自动机(Deterministic Final Automata 确定型有穷自动机)和 NFA 自动机(Non deterministic Finite Automaton 不确定型有穷自动机)

其实在正则表达式中有这么三种模式:贪婪模式、懒惰模式、独占模式。

在关于数量的匹配中,有 + ? * {min,max} 四种两次,如果只是单独使用,那么它们就是贪婪模式。

如果在他们之后加多一个 ? 符号,那么原先的贪婪模式就会变成懒惰模式,即尽可能少地匹配。但是懒惰模式还是会发生回溯现象的。

在使用正则之前可以先到 https://regex101.com/ 测试一个运行效率;

献上一篇靓文:https://zhuanlan.zhihu.com/p/38229530详细讲解了正则效率低的原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值