2010-11-26 93 views
2
$var = '<lang test=<php>string</php>><lang test2=before<php>inside</php>>'. 
     '<lang test3=THIRD_WITHOUT_PHP_TAGS><lang test4>'; 
if (preg_match_all('#<lang (.*?)>#', $var, $gg)) 
{ 
    var_dump($gg[1]); 
} 

我得到的轉儲:PHP的preg_match正則表達式

array(2) { 
    [0]=> 
    string(9) "test=<php" 
    [1]=> 
    string(16) "test2=before<php" 
} 

但我想:

test=<php>string</php> 

test2=before<php>inside</php> 

test3=THIRD_WITHOUT_PHP_TAGS 

test4 

怎麼辦呢?

編輯: i更改$變種並添加第三表達

編輯2: ADEED而不第四表達 「=」

+0

是'`總是在最後(`> `)? – 2010-11-26 12:46:17

+0

你可以使用`$ var =''; `你不需要修改你是正則表達式,或者你可以跳過'>'的前兩個概率,但是如果你通過`$ var ='`而沒有任何標記?比我更好的人會找出答案,而不需要更改php標籤 – 2010-11-26 12:48:18

+0

@JanHančič,並非總是如此。這可能不是 – Isis 2010-11-26 12:48:45

回答

3

最簡單的方法將是

#<lang (\w+=[^<]*(<[^>]+>)?[^<]+(?(2)</[^>]+>))># 

正則表達式檢查標籤i s匹配,然後才檢查結束標記。

如果您還想趕上第四個參數,你需要使用

#<lang (\w+(=[^<]*(<[^>]+>)?[^<]+(?(3)</[^>]+>))?)># 
0
$var = '<lang test=<php>string</php>><lang test2=before<php>inside</php>>'; 
if (preg_match_all('#<lang (.*>)>#U', $var, $gg)) 
{ 
    var_dump($gg[1]); 
} 
+0

爲什麼你用#開始reg exp? – XMen 2010-11-26 13:04:52

-1

我會做這種方式:

preg_match("/<lang (.*)>/i", $var, $gg)