php中的正则表达式:采用最短匹配

Fla*_*Moe 8 php regex

我正在尝试做一个PHP正则表达式,但我找不到正确的方法......

想象一下,我有这个字符串:"你好,我{{name is Peter}}和{{我想吃巧克力}}"

我想在{{和}}之间取部分

但是,如果我使用 preg_match("/\{\{(.*)?\}\}/", $string)

它返回给我一个字符串"{{name is Peter}}和{{我想吃巧克力}}"

我怎么能说出}}的第一个巧合?

谢谢

Jen*_*ens 26

使用

"/{{(.*?)}}/"
Run Code Online (Sandbox Code Playgroud)

表达式".*"是贪婪的,尽可能多地使用字符.如果你使用的".*?"是尽可能少的字符,那就是它停在第一组右括号中.


Kin*_*nch 7

默认情况下,PCRE功能贪婪.这意味着,引擎总是试图匹配尽可能多的字符.解决方案很简单:告诉他用U修饰符非贪婪

/{{(.+)}}/U
Run Code Online (Sandbox Code Playgroud)

http://php.net/reference.pcre.pattern.modifiers