我需要一个正则表达式匹配任何标签都有classname" 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"/>
答案 0 :(得分:0)
就像我在评论中发布的那样,你不想用正则表达式来解析html。你应该在很少的情况下。通常,您将使用DOMDocument和XPath来查询元素(类似于css)。这将允许您获取内部文本,嵌套元素以及正则表达式无法轻松完成的更多内容。
但是,如果需要,这应该有效:
<?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
答案 1 :(得分:-1)
使用此正则表达式:
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([^"']*)("|'))