2013-07-02 61 views

回答

1

要明確獲取參數值,您必須首先左邊部分匹配:

/\{myparam/ 

後面至少一個空間:

/\{myparam\s+/ 

捕捉字符,直到右大括號中找到:

/\{myparam\s+([^}]+)\}/ 

表達[^}]+是負字符集,由^只是左括號後指示;它的意思是「匹配除這些以外的所有字符」。

1

paramvalue嘗試用這個表達式:

/\{\w+\s+(\w+)\}/ 
+0

作品...... Thanks..Can請你告訴什麼是真正做到這一點EXP意思?? –

2

簡單的正則表達式:

/\({[^ ]+?) ([^}]+?)\}/ 
  • {[^ ]+?) - 它會尋找任何東西至少1次發生,但空間並把它放在子模式
  • ([^}]+?) - 它會尋找任何東西至少1次發生,但{並把它放在子模式。

preg_match()功能使用

OR

其他簡單的regex:

preg_match('/([a-z0-9]+?) ([a-z0-9]+?)\}/', $str, $matches); 
  • ([a-z0-9]+?) - AZ 0-9至少一次,不貪
  • ([^}]+?) - az 0-9至少有一次不貪心

輸出:

Array ([0] => myparam paramvalue} [1] => myparam [2] => paramvalue) 

Demo

1
if(preg_match('/\{'.preg_quote('myparam').' ([^\}]+)\}/', $input, $matches) { 
    echo "myparam=".$matches[1]; 
} else { 
    echo "myparam not found"; 
} 
    中的preg_match
  1. , '{' 和 '}' 是特殊字符,所以它們需要進行轉義
  2. preg_quote可能不是必需的,只要「myparam」永遠不會有特殊正則表達式字符
  3. (神祕)部分([^}] +)}匹配一個或多個不是'}的字符,後跟'}'
  4. 匹配成分使第三個arg中的匹配的preg_match,$在這種情況下匹配
0

你可以試試這一個,以及:

.+?\s+([^}]+) 

編輯

說明:

.+?  means match everything one or more time but its lazy, will prefer to match as less as it can. 
\s+  means it will match white-spaces one or more time. 
([^}]+) means match everything except `}`(close bracket) one or more time and capture group. 
+0

你能否延長你的回答,讓另一位讀者能夠理解你的答案? –

+0

@UwePlonus,我已經用解釋更新了答案。 – NeverHopeless