0

我需要一个 PHP 正则表达式模式来分别<ul></ul>从字符串中选择所有列表。字符串是这样的:

Lorem ipsum dolor sit amet,...
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
Lorem ipsum dolor sit amet,...
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
....

我需要提取两个列表并将它们保存在数组中,因此结果如下所示:

$listsarray[0] = first list code from <ul> to </ul>.
$listsarray[1] = second list code, etc..

我已经尝试过,但这并没有按预期工作。如果有两个以上的列表,它会选择前两个作为一个(我不知道为什么,我是正则表达式的新手):

$content = 'the content like above...';
$pattern = '/<ul[^.]*<\/ul>/';
preg_match_all($pattern, $content, $listsarray)
4

2 回答 2

3

不要使用正则表达式来解析 HTML,这是一个坏主意,因为 HTML 不是正则语言......您可以使用其他方法,例如tidy内置的 DOMDocument来轻松解析它而无需正则表达式

如果你坚持,你正在寻找的是不情愿的匹配(而不是贪婪)

更改**?

请参阅这篇关于差异的文章和这篇关于为什么尝试使用正则表达式解析 html 是一个坏主意的文章

于 2012-07-06T09:31:02.097 回答
0

用这个:

<ul>(?<ulContent>.*?)</ul>

并获取名为ulContent 的组

于 2012-07-06T09:38:10.760 回答