2011-05-11 51 views
0

我想抓住开放标签的匹配。遇到包含子标签的父标签打开的问题。父标签被捕获,但它忽略了儿童标签。PHP preg_match_all重新分配模式

ex。

</p> 
<p>hello world</p> 
<p><img 

preg_match_all('/<(\/?[a-z]+)[^>]*\/?>/i', $trimmed_text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); 

会给下面的输出:

Array 
(
[0] => Array 
    (
     [0] => Array 
      (
       [0] => 


       [1] => 0 
      ) 

     [1] => Array 
      (
       [0] => /p 
       [1] => 1 
      ) 

    ) 

[1] => Array 
    (
     [0] => Array 
      (
       [0] => 

[1] => 5) [1] => Array ([0] => p [1] => 6)) [2] => Array ([0] => Array ([0] => 

       [1] => 19 
      ) 

     [1] => Array 
      (
       [0] => /p 
       [1] => 20 
      ) 

    ) 

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

[1] => 24) [1] => Array ([0] => p [1] => 25))) 

是否有可能在父所有打开的标签有一个子集阵列?

+4

而这里也正是为什么你不解析HTML/XML与正则表达式。使用DOM而不是找到你想要的。 – 2011-05-11 19:22:22

+0

我推荐你去http://php.net/manual/en/book.tidy.php – 2011-06-12 07:54:01

回答

1

你这样做硬盘的方式,使用PHP Simple HTML DOM Parser解析HTML,

例如:

// Create DOM from URL or file 
include('simple_html_dom.php'); 
$html = file_get_html('http://www.scroogle.org/'); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>';