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

Php Regexp:使用先行断言作为条件,php,regex,pcre,lookaround,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” 我知道第二个更快。还有其他区

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

\ba{3}\b

(?=\ba{3}\b).*
二者仅与第二个单词(aaa)匹配:

zzz aaa bbb

我想知道两者在性能或其他方面是否有区别,或者出于某种原因,其中一个是否比另一个更可取

编辑:

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

我最初的模式是:

(?=^a{3}$).*
^a{3}$
我最初的例子是:

zzz
aaa
bbb
我认为这两种模式都符合“aaa”


我知道第二个更快。还有其他区别吗

正如Jerry在评论中指出的,第二个匹配
AAABBB
。然而,我个人认为这会更简单,因为谈到正则表达式,我想到了三件事:

  • 匹配域
  • 复杂性
  • 速度
  • 任何正则表达式匹配所需字符串的简单性都与它的速度有直接关系,所以使用较少的表达式可以更快地搜索整个文本

    有些表达式确实要花很多钱,所以在尝试选择正则表达式的最佳选择时,为什么要考虑更多

    在正则表达式
    ^a{3}$
    上,引擎会说:我是认真的它是直接的、简单的,有一个明显的匹配域

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


    现在,你会喜欢哪一个?

    第二个正则表达式将匹配
    aaa bbb
    模式不同。但是如果它们是一样的,那么第一个远远不是最快的。还有一件事,第一个模式匹配第一个单词,而不是第二个。谢谢你们的回答,伙计们。哦,嘿,你们更改了用户名和gravatar o.o