Php 正则表达式匹配 html 标签包含某个 class 名称
Php regex matches html tags contain a certain class name
我需要一个正则表达式来匹配任何具有类名的标签 "share"
我觉得我很接近。有了这个:
class=".*share.*"
我希望它与这些匹配:
<div class="share"></div>
<div class="sdfsd share sdfsdfsdf"></div>
但不是这些:
<div class="sdfsd dfdgdg" share></div>
<a class="icon-share export-to-csv-button"/>
<a class="fxac link" href="/share"/>
使用这个正则表达式:
class=([^=]*)([^(a-z|A-Z|0-9|\-|_)])share("|([^(a-z|A-Z|0-9|\-|_)]).*")
https://regex101.com/r/uU6dU0/4
编辑:这个更简单,不会匹配多个标签:
class=("|"([^"]*)\s)share("|\s([^"]*)")
https://regex101.com/r/uU6dU0/5
编辑 2:找到 类 两边使用单引号的改进版本:
class=(("|')|("|')([^"']*)\s)top-menu(("|')|\s([^"']*)("|'))
就像我在评论中发表的那样,您不想使用正则表达式解析 html。在极少数情况下你应该这样做。通常,您会使用 DOMDocument 和 XPath 来查询(类似于 css)元素。这将允许您获取内部文本、嵌套元素以及正则表达式无法做到的更多内容 well/easily.
但是,如果需要,这应该可行:
<?php
$text =<<<HTML
<div class="share"></div>
<div class="sdfsd share sdfsdfsdf"></div>
<div class="sdfsd dfdgdg" share></div>
<a class="icon-share export-to-csv-button"
<a class="fxac link" href="/share "
HTML;
preg_match_all('/<[^>]*class="[^"]*\bshare\b[^"]*"[^>]*>/i', $text, $matches);
echo '<pre>'.htmlentities(print_r($matches,1)).'</pre>';
输出:
Array
(
[0] => Array
(
[0] => <div class="share">
[1] => <div class="sdfsd share sdfsdfsdf">
)
)
您可以在此处查看实际效果:http://codepad.viper-7.com/UjBvT8
我需要一个正则表达式来匹配任何具有类名的标签 "share"
我觉得我很接近。有了这个:
class=".*share.*"
我希望它与这些匹配:
<div class="share"></div>
<div class="sdfsd share sdfsdfsdf"></div>
但不是这些:
<div class="sdfsd dfdgdg" share></div>
<a class="icon-share export-to-csv-button"/>
<a class="fxac link" href="/share"/>
使用这个正则表达式:
class=([^=]*)([^(a-z|A-Z|0-9|\-|_)])share("|([^(a-z|A-Z|0-9|\-|_)]).*")
https://regex101.com/r/uU6dU0/4
编辑:这个更简单,不会匹配多个标签:
class=("|"([^"]*)\s)share("|\s([^"]*)")
https://regex101.com/r/uU6dU0/5
编辑 2:找到 类 两边使用单引号的改进版本:
class=(("|')|("|')([^"']*)\s)top-menu(("|')|\s([^"']*)("|'))
就像我在评论中发表的那样,您不想使用正则表达式解析 html。在极少数情况下你应该这样做。通常,您会使用 DOMDocument 和 XPath 来查询(类似于 css)元素。这将允许您获取内部文本、嵌套元素以及正则表达式无法做到的更多内容 well/easily.
但是,如果需要,这应该可行:
<?php
$text =<<<HTML
<div class="share"></div>
<div class="sdfsd share sdfsdfsdf"></div>
<div class="sdfsd dfdgdg" share></div>
<a class="icon-share export-to-csv-button"
<a class="fxac link" href="/share "
HTML;
preg_match_all('/<[^>]*class="[^"]*\bshare\b[^"]*"[^>]*>/i', $text, $matches);
echo '<pre>'.htmlentities(print_r($matches,1)).'</pre>';
输出:
Array
(
[0] => Array
(
[0] => <div class="share">
[1] => <div class="sdfsd share sdfsdfsdf">
)
)
您可以在此处查看实际效果:http://codepad.viper-7.com/UjBvT8