Regexp:使用先行断言作为条件

时间:2013-12-19 17:24:16

标签: php regex pcre lookaround

我相信下面的两个正则表达式做同样的事情:

\ba{3}\b

(?=\ba{3}\b).*

两者都只匹配第二个单词(aaa):

  

zzz aaa bbb

我想知道在表现方面或任何其他方面之间是否存在任何差异,或者出于某种原因是否比另一方更为可取。

编辑:

上面的模式确实匹配不同的东西(“aaa”和“aaa bbb”)。对不起,我的错。

我原来的模式是:

(?=^a{3}$).*
^a{3}$

我原来的例子主题是:

zzz
aaa
bbb

就像我认为两种模式都匹配“aaa”。

据我所知,第二个更快。还有其他区别吗?

2 个答案:

答案 0 :(得分:1)

正如Jerry在评论中指出的那样,第二个匹配aaa bbb。但是,我个人认为它更简单,因为\ba{3}\b.*

答案 1 :(得分:0)

谈论正则表达式,我会想到三件事:

  1. 匹配域
  2. 复杂性
  3. 速度
  4. 任何正则表达式与所需字符串匹配的简单性与其速度有直接关系,因此使用较少的表达式可以更快地搜索整个文本。

    有些表达式真的花了很多钱,所以当你试图选择你的正则表达式的最佳选择时,你为什么要多考虑?!

    在正则表达式^a{3}$上,引擎会说: 我的意思是真的! 这是直截了当的,只有一个明显的匹配域。

    然而,在第二个(?=^a{3}$).*引擎中并不意味着它。它可能有很多匹配的情况,它有一个积极的前瞻和消耗更多的资源。

    现在,你要去哪一个去爱?