php preg_match_all:拆分列表项和子列表

发布于 2024-10-14 21:47:54 字数 1185 浏览 2 评论 0原文

我正在尝试使用 php 的 preg-match-all 函数分割一些 html 内容:

<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>';
}

这样做的缺点是它会丢弃子列表,并输出同一级别中的所有列表项;父母和孩子之间没有区别。

有保留原始层次结构的想法吗?

谢谢:)

I'm trying to split some html content using php's preg-match-all function:

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

I want to be able to change the link description, for example;

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

to

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

while keeping the structure of the original html.
so far, I succeeded to split the links using :

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

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

the drawback of this is that it discards child lists, and outputs all the list items in the same level; no distinction between parent and child.

any idea to keep original hierarchy?

thanx :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不回头走下去 2024-10-21 21:47:54

使用 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 是您使用正则表达式搜索并分组的内容。

最好是您使用一些在线编辑器或其他东西...例如 这个

并尝试一下!希望它有帮助...

use preg_replace to replace strings! something like this here:

$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);

where $1 or $2 is the thing you have searched with regex and grouped in.

best would be that you use some online editor or something... like this one

and try there! hope it helps...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文