我有一个包含以下代码的页面: -
<ul class="food">
<li>
<i>Bread and Butter</i>
</li>
<li>
<i>Cheese</i>
</li>
<li>
<i>Milk</i>
</li>
</ul>
<ul class="fruits">
<li>
<i>Apple</i>
</li>
<li>
<i>Mango</i>
</li>
<li>
<i>Strawberry</i>
</li>
</ul>
有两个无序列表,我想要的是斜体标记之间的内容,每个无序列表都在一个数组中。例如,Apple,Mango和Strawberry,它们是第二个无序列表的内容,应该存储在一个数组中,比如array [1],其他无序列表的内容应该存储在array [0]中。 任何无序列表中的项目数也是可变的或事先不知道,这是另一个问题。 我试过的正则表达式是
<ul class=".*">\s(?:<li>\s<i>(.*)<\/i>\s<\/li>)+<\/ul>
除了那个正则表达式之外,我整天都尝试了很多其他的,但没有成功。我是正则表达式和PHP的新手,并没有太多的想法。有人可以帮我弄这个吗? 编辑:我只允许使用正则表达式来获取内容。不允许解析
答案 0 :(得分:0)
拆分完整字符串:
/<ul.*?>/m
然后遍历拆分并应用以下正则表达式来捕获斜体值“
/<i>(.*?)<\/i>/m
的Src:
<?php
$re = '/<ul.*?>/m';
$re1 = '/<i>(.*?)<\/i>/m';
$str = '<ul class="food">
<li>
<i>Bread and Butter</i>
</li>
<li>
<i>Cheese</i>
</li>
<li>
<i>Milk</i>
</li>
</ul>
<ul class="fruits">
<li>
<i>Apple</i>
</li>
<li>
<i>Mango</i>
</li>
<li>
<i>Strawberry</i>
</li>
</ul>';
$list=preg_split($re,$str);
for($i=1;$i<count($list);$i++)
{
preg_match_all($re1, $list[$i], $matches);
print_r($matches[1]);
}
?>
示例输出:
Array
(
[0] => Bread and Butter
[1] => Cheese
[2] => Milk
)
Array
(
[0] => Apple
[1] => Mango
[2] => Strawberry
)