2013-01-14 49 views
2

正則表達式有困難(他們不是我的強項)。我想匹配之間的所有字符串{{和}},但如果在同一行上出現一套支架,它計數,作爲一個單一的比賽。例:PHP preg_match_all同一行

$string = " 
    Hello, kind sir 
    {{SHOULD_MATCH1}} {{SHOULD_MATCH2}} 
    welcome to 
    {{SHOULD_MATCH3}} 
    "; 

preg_match_all("/{{(.*)}}/", $string, $matches); 

var_dump($matches); // returns arrays with 2 results instead of 3 

回報:

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(35) "{{SHOULD_MATCH1}} {{SHOULD_MATCH2}}" 
    [1]=> 
    string(17) "{{SHOULD_MATCH3}}" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(31) "SHOULD_MATCH1}} {{SHOULD_MATCH2" 
    [1]=> 
    string(13) "SHOULD_MATCH3" 
    } 
} 

任何幫助?謝謝!

回答

4

*量詞替換爲non-greedy的形式*?

這將盡可能少地匹配,同時仍然允許表達式作爲整體匹配,這與它的當前匹配行爲儘可能不同。

+1

或者你可以添加標誌 「U」 給力非貪婪模式。像'preg_match_all(「/{{(.*)}}/ U」,$ string,$ matches)' –

+0

接受解釋,謝謝喬恩。 +1給Fab Sa以獲得正確答案。 – Mike

1

您可以使用以下模式之一。

  1. {{(.+?)}
  2. {{([^}]+)
  3. {{(\w+)
  4. {{([[:digit:][:upper:]_]+)
  5. {{([\p{Lu}\p{N}_]+)