提问人:Dg2A 提问时间:12/1/2021 最后编辑:ADysonDg2A 更新时间:12/1/2021 访问量:70
php 中有什么方法可以选择包含相同单词的所有类
Is there any way in php to select all classes that contain the same word
问:
我想知道是否有任何方法可以在 php 中将所有类与同一个词匹配, 例:
<div class="classeby_class">
<div class="classos-nope">
<div class="row">
<div class="class-show"></div>
</div>
</div>
</div>
<div class="class-first-one">
<div class="container">
<div class="classes-show">
<div class="class"></div>
<div class="classing"></div>
</div>
</div>
</div>
在上面的例子中,我想匹配所有包含该词的词,但不匹配那些有这样的词,div
"class"
"classes"
阳性
<div class="class-show">...</div>
<div class="class-first-one">...</div>
<div class="class">...</div>
<div class="class-first-one">...</div>
但对
<div class="classeby_class">...</div>
<div class="classes-show">...</div>
<div class="classing">...</div>
我正在使用 php 显示几个不同的 html 页面。 由于正则表达式不是合适的方法,首先是因为几个分页符,其次是因为托管限制,我正在尝试通过解析来做到这一点。
所有html代码都存储在服务器上。 我可以使用下面的示例对特定类进行限制。
$doc = new DomDocument();
$xpath = new DOMXPath($doc);
$classtoremove = $xpath->query('//div[contains(@class,"class")]');
foreach($classtoremove as $classremoved){
$classremoved->parentNode->removeChild($classremoved);
}
echo $HTMLDoc->saveHTML();
我知道有CSS选择器,但是当我尝试在PHP中使用它时,它不起作用。可能是因为我使用的是 XPath。 例:
'[id*="class"],[class*="class"]'
不过,我认为他会采取超出我需要的价值观。 有什么办法可以通过Xpath获取这些值吗? 目的是完全删除包含该单词的 div 或其他标签。
答:
0赞
The fourth bird
12/1/2021
#1
您可以使用具有词边界的正则表达式来表示类属性,并使用 DOMXPath::registerPhpFunctions。\bclass\b
例如
$data = <<<DATA
<div class="classeby_class">
<div class="classos-nope">
<div class="row">
<div class="class-show"></div>
</div>
</div>
</div>
<div class="class-first-one">
<div class="container">
<div class="classes-show">
<div class="class"></div>
<div class="classing"></div>
</div>
</div>
</div>
DATA;
$doc = new DomDocument();
$doc->loadHTML($data);
$xpath = new DOMXPath($doc);
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions();
$classtoremove = $xpath->query("//div[1 = php:function('preg_match', '/\bclass\b/', string(@class))]");
foreach ($classtoremove as $a) {
var_dump($a->getAttribute("class"));
}
输出
string(10) "class-show"
string(15) "class-first-one"
string(5) "class"
观看 PHP 演示
上一个:获取可迭代节点之间的所有文本节点
下一个:如何在xml中隐藏输入?
评论