用于查找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 标签及其内容的正则表达式的否定 - java