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详细讲解了正则效率低的原因