2014-03-04 83 views
0

我需要建議如何從這個字符串中提取內容。如何拉elseif - preg_match_all

$string = "{elseif "xxx"=="xxx"} text {elseif "xx2"!="xx2"} 
text text 
text 
{elseif ....} text"; 
//or 'xxx'=='xxx' 

$regex = "??"; 
preg_match_all($regex, $string, $out, PREG_SET_ORDER); 
var_dump($out); 

而且我的var_dump輸出的想法是:

array 
    0 => 
    array 
     0 => string 'xxx' (length=3) 
     1 => string '==' (length=2) 
     2 => string 'xxx' (length=3) 
     3 => string 'text' (length=4) 
    1 => 
    array 
     1 => string 'xx2' (length=) 
     2 => string '!=' (length=) 
     3 => string 'xx2' (length=) 
     4 => string 'text text 
text' (length=) 
    2 => 
    array 
     ... 

輸出不一定是如下,但相同的內容。

我嘗試:

$regex = "~{elseif ([\"\'](.*)[\"\'])(!=|==|===|<=|<|>=|>)([\"\'](.*)[\"\'])}(.*)~sU"; 

但我有不好的或不輸出的內容。

+0

你有什麼企圖嗎? – Jerry

+0

現在您剛剛告訴我們您的部分/次要問題,以及您尋求解決問題的錯誤工具(您沒有經驗)。詳細說明上下文和先前的嘗試。 – mario

+0

你會碰到這樣的解析頭痛。例如,你最終會嘗試嵌套一個'{if}'語句,它將不起作用。你最終會嘗試使用不起作用的變量。您最終需要檢查多個不可用的值。這只是一個等待發生的頭痛。 –

回答

0

你的意思是這樣的嗎? If you want to test it

$regex = "/\{\s*elseif\s*(\"[^"]+\")\s*([^"]+)\s*(\"[^"]+\")\s*\}\s*([^{]*)\s*/gi"; 
+0

很好,這是好的,謝謝 – user3380605