2013-10-26 153 views
0

我需要在花括號中提取文本,但前提是它們中的第一個單詞是「允許」單詞。 例如下面的文字:preg_match返回奇怪的結果

awesome text, 
a new line {find this braces}, 
{find some more} in the next line. 
Please {dont find} this ones. 

在這個簡單的例子, 「發現」 代表允許字

我學嘗試:

$pattern  = '!{find(.*)}!is'; 
$matches  = array(); 
preg_match_all($pattern, $text, $matches, PREG_SET_ORDER); 

返回怪異的結果(print_r的):

Array 
(
    [0] => Array 
     (
      [0] => {find this braces}, 
    {find some more} in the next line. 
    Please {dont find} 
      [1] => this braces}, 
    {find some more} in the next line. 
    Please {dont find 
     ) 

) 

雖然工作正常,但沒有「發現」的模式(但然後噸他也找到了一個「不」。

這可能是什麼原因造成的?

回答

3

.*將貪婪的匹配,即儘可能possible.Use .*?匹配懶洋洋地即儘可能少

所以,你的正則表達式將是

!{find(.*?)}!is 

或者您可以使用[^{}]代替.*? ..在這種情況下,你不需要使用單線模式

!{find([^{}]*)}!i 
+0

你比我快:p – nut

+0

@nut我想我是第一個看到這個問題的人;;) – Anirudha

+0

加入問號的工作。謝謝! – iceteea