php中有啥方法可以选择包含相同单词的所有类

Posted

技术标签:

【中文标题】php中有啥方法可以选择包含相同单词的所有类【英文标题】:Is there any way in php to select all classes that contain the same wordphp中有什么方法可以选择包含相同单词的所有类 【发布时间】:2022-01-07 21:13:42 【问题描述】:

我想知道在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>

在上面的示例中,我想匹配包含单词 "class" 的所有 div,但不匹配包含单词 "classes" 的所有 div 喜欢,

积极的

<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 $clas-s-removed)
         $clas-s-removed->parentNode->removeChild($clas-s-removed);

echo $HTMLDoc->saveHTML();

我知道有 CSS 选择器,但是当我尝试在 PHP 中使用它时它不起作用。可能是因为我使用的是 XPath。 示例:

'[id*="class"],[class*="class"]'

不过,我认为他的价值观会超出我的需要。 有什么方法可以通过 Xpath 获取这些值? 目的是完全删除包含该单词的 div 或其他标签。

【问题讨论】:

看看***.com/questions/33441697/… 【参考方案1】:

您可以使用带有字边界\bclass\b 的正则表达式作为类属性并使用DOMXPath::registerPhpFunctions。

例如

$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 demo

【讨论】:

以上是关于php中有啥方法可以选择包含相同单词的所有类的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JQuery/CSS 选择所有以某个单词开头、包含或结尾的单元格?

idea java 有没有这样的快捷键 先选择一个单词 然后找出并下面同样的单词

在 PHP 的另一个类的方法中有条件地包含一个类文件的优点和缺点是啥?

jQuery 选择器:获取包含特定单词的第一个元素类的内容

有啥方法可以找到是不是在角度 ag-grid 中选择了行 [关闭]

选择所有子项仅包含相同值且没有其他方案的行