php preg_match_all:拆分列表项和子列表
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用 preg_replace 来替换字符串!这里是这样的:
其中 $1 或 $2 是您使用正则表达式搜索并分组的内容。
最好是您使用一些在线编辑器或其他东西...例如 这个
并尝试一下!希望它有帮助...
use preg_replace to replace strings! something like this here:
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...