PHP preg_match_all шаблон повторного получения - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь получить совпадение открытых тегов. Возникла проблема с открытием родительского тега, включая дочерний тег. Родительский тег захвачен, но он игнорирует дочерние теги.

ех.

</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 ) ) ) 

Возможно ли, чтобы любые открытые теги в родительском элементе имели подмножество массива?

1 Ответ

1 голос
/ 08 августа 2011

Вы делаете это трудным путем, используйте PHP Simple HTML DOM Parser для анализа html,

ex:

// 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>'; 
...