2013-02-25 17 views
0

Reqex問: 提取的話PHP正則表達式:從<a>幸運<b>魅力</b>抽取幸運,魅力</a>

lucky 
charms 

從字符串:

<a>lucky <b>charms</b></a> 

我嘗試:

preg_match_all("/<(.*)>(.*)<\/(.*)>+/is", $text, $matches); 
print_r($matches); 

結果:

Array 
(
    [0] => Array 
     (
      [0] => <a>lucky <b>charms</b></a> 
     ) 

    [1] => Array 
     (
      [0] => a>lucky <b>charms</b 
     ) 

    [2] => Array 
     (
      [0] => 
     ) 

    [3] => Array 
     (
      [0] => a 
     ) 

) 
+0

問題是什麼?正則表達式太貪婪?使它不那麼貪婪。 – mario 2013-02-25 22:59:48

+0

[爲什麼這個正則表達式匹配太多了? (不停止斜線)](http://stackoverflow.com/questions/8100746/why-does-this-regex-match-too-much-doesnt-stop-at-slash) – mario 2013-02-25 23:00:20

+0

你試過用'用strip_tags()'? – Tchoupi 2013-02-25 23:01:54

回答

0

怎麼樣在一個結束標記和下一個開始標記之間的一切

preg_match_all("/\>([^\<]+)\</is", $text, $matches); 

然後你想要的比賽是在$matches[1]

Array 
(
    [0] => Array 
     (
      [0] => >lucky < 
      [1] => >charms< 
     ) 
    [1] => Array 
     (
      [0] => lucky 
      [1] => charms 
     ) 
) 
0

如果你總是有一個結構,你可以使用:

preg_match("#<(.*?)>(.*?)<(.*?)>(.*?)</\\3></\\1>#is", '<a>lucky <b>charms</b></a>', $matches); 

其中$matches包含:

array(5) { 
    [0]=> 
    string(26) "lucky charms" 
    [1]=> 
    string(1) "a" 
    [2]=> 
    string(6) "lucky " 
    [3]=> 
    string(1) "b" 
    [4]=> 
    string(6) "charms" 
} 
0

你的正則表達式是不適合的,因爲*是gready用呢?使*非gready或者改變你的正則表達式中像這樣

<([^>]+)>(.*?)</\1>