如何使用preg_match()获得最短而不是最长的正则表达式匹配

时间:2011-05-05 12:15:24

标签: php regex preg-match

我的字符串与此类似:

{{something1}} something2 {{something3}} something4

如何使用preg_match()函数匹配“something1”?

我试过了:

preg_match("/\{\{(.*)\}\}/si",$content,$matches);

但是匹配太多,返回

something1}} something2 {{something3

我尝试将\b添加到模式中,但也没有得到我想要的那样。

你能帮帮我吗?

3 个答案:

答案 0 :(得分:19)

使用非贪婪修饰符?

preg_match("/\{\{(.*?)\}\}/si",$content,$matches);
             here --^

答案 1 :(得分:1)

一个完整的答案 - 如果我们的$ var是:

STARTT 
FIRST KKK
SECOND KKK

1)如果我们使用:

$var = preg_replace('/STARTT(.*)KKK/', 'REPLACED-STRING', $var);

它将改变从STARTT到最后KKK的所有内容,结果将是:

REPLACED-STRING

2)如果我们使用:

$var = preg_replace('/STARTT(.*?)KKK/', 'REPLACED-STRING', $var);

结果将是:

REPLACED-STRING 
SECOND KKK

答案 2 :(得分:0)

试试这个:

preg_match('|{{([^}]+)}}|si', $content, $matches);

echo $matches[1];