用于查找html标签的正则表达式[重复]

Posted

技术标签:

【中文标题】用于查找html标签的正则表达式[重复]【英文标题】:Regular expression for finding html tags [duplicate] 【发布时间】:2020-12-15 00:26:37 【问题描述】:

我正在尝试编写一个函数,它将查找字符串中的每个子字符串,其中子字符串是一些html标签,例如

<li>

但是我的正则表达式不起作用,我找不到我的错误。

    $str = 'hello brbrbr <li> hello</li> <li>how are you?</li>';
    $items = preg_match_all('/(<li>\w+<\/li>)', $str, $matches);

$items 必须是所需子字符串的数组

【问题讨论】:

\w 是任何单词字符,你有空格,也许添加\s 就足够了。 哦,是的,表达式也没有正确关闭。去regex101.com玩吧 没有空格我在 $items 中也有 0 个子行 谢谢,现在我有正确的表达(\w+),但我仍然只有一个子字符串的计数,这个函数只找到第一个 考虑使用 DOMDocument 来解析和操作 HTML 或 XML 标签。不要用正则表达式重新发明***。 【参考方案1】:

考虑使用 DOMDocument 来解析和操作 HTML 或 XML 标记。不要用 Regex 重新发明***。

$str = 'hello brbrbr <li> hello</li> <li>how are you?</li>';
$dom = new DOMDocument();
$dom->loadHTML($str);
$li = $dom->getElementsByTagName('li');
$value = $li->item(0)->nodeValue;
echo $value;

'你好'


或者如果你想遍历所有

foreach($li as $item)
    echo $item->nodeValue, php_EOL;

'你好' “你好吗?”

【讨论】:

【参考方案2】:

Markus 的回答是正确的,但如果您只想要快速而肮脏的正则表达式,那就是:

$str = 'hello brbrbr <li> hello</li> <li>how are you?</li>';
preg_match_all('/(<li>.+<\/li>)/U', $str, $items);

U 让它变得不贪婪。

【讨论】:

以上是关于用于查找html标签的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在两个html标签之间查找正则表达式[重复]

正则表达式 - 从 HTML 文件中查找各种字符串 [重复]

用于查找 HTML 标签及其内容的正则表达式的否定 - java

正则表达式查找html标签c#之外的任何文本[关闭]

用于python的正则表达式来捕获两个XML标签之间的所有内容[重复]

删除正则表达式中的 Html 标签 [重复]