php preg_match_all: разделить элементы списка и дочерние списки - PullRequest
1 голос
/ 27 января 2011

Я пытаюсь разделить html контент с помощью функции php preg-match-all:

<li class="cat-item"><a title="blabla" href="#">parent 1</a>
    <ul class="children">
        <li class="cat-item"><a title="" href="#">child 1</a></li>
    </ul>
</li>
<li class="cat-item cat-item-4"><a title="blabla" href="#">father 2</a>
    <ul class="children">
        <li class="cat-item"><a title="" href="#">child 1</a></li>
        <li class="cat-item"><a title="bla" href="#">child 2</a></li>
    </ul>
</li>

Я хочу иметь возможность изменить описание ссылки, например;

<a title="" href="#">child 1</a>

до

<a title="" href="#">I changed that</a>

при сохранении структуры исходного HTML. до сих пор мне удалось разделить ссылки, используя:

$results = preg_match_all('/<a\s[^>]*href\s*=\s*(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU', $html, $tokens); 

foreach ( $tokens[0] as $category)
{
    echo $category.'<br>';
}

недостатком этого является то, что он отбрасывает дочерние списки и выводит все элементы списка на одном уровне; нет различия между родителем и ребенком.

есть идеи сохранить оригинальную иерархию?

спасибо:)

1 Ответ

0 голосов
/ 27 января 2011

используйте preg_replace для замены строк! как то вот так:

$output = preg_replace("/^([123]0|[012][1-9]|31)(\\.|-|\/|,)(0[1-9]|1[012])(\\.|-|\/)(19[0-9]{2}|2[0-9]{3})$/","$1",$in_nn_date);

где $ 1 или $ 2 - это то, что вы искали с помощью регулярных выражений и сгруппировали.

Лучше всего, если вы используете какой-нибудь онлайн-редактор или что-то в этом роде ... как этот

и попробуйте там! надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...