正则表达式仅匹配HTML块中第一个列出的项目

时间:2014-02-18 23:46:36

标签: regex

我的CMS允许PHP关键字替换,我目前正在构建一种格式,以返回数据字段中第一个列出的项元素,该数据字段通常包含HTML无序列表,但通常可以包含段落等。

如果可能的话,我想使用正则表达式来匹配返回块中第一个列出的项元素li,然后打印它。

一个严重的限制是,我无法使用^字符,因为我的CMS(令人讨厌)将该字符用于修改功能。

到目前为止,我只提出:replace:<\/li>.*:</li></ul> - 但这只是替换了返回块中第一个列出的项目的结束标记。我真正需要的是:

replace:anything_that's_not_first_li_element:nothing

我很欣赏这个问题是一个很长的问题,所以提前感谢所有建设性的回应。

1 个答案:

答案 0 :(得分:0)

您可以将此正则表达式与s标志一起使用。

(?<=<ul>).*?<li>.*?<\/li>

工作正则表达式示例:

http://regex101.com/r/hL1zF0

PHP:

$list = '<ul>
<li>first</li>
<li>second</li>
<li>third</li>
<li>fourth</li>
</ul>';

preg_match('/(?<=<ul>).*?<li>.*?<\/li>/s', $list, $matches);

echo $matches[0];

输出:

<li>first</li>