Php simple_html_dom查找仅包含特定文本的所有元素

Php simple_html_dom查找仅包含特定文本的所有元素,php,html,dom,simple-html-dom,Php,Html,Dom,Simple Html Dom,我有: 某物 布拉格 诸如此类 布拉格 万卡万卡 瓦卡布拉格 布拉格 我只想得到只包含“blarg”而不包含其他文本的元素,因此: <span>something or other</span> <b>blarg</b> <b>blarg and stuff</b> <span>blarg</span> <em>wakka wakka</em> <em>

我有:

某物
布拉格
诸如此类
布拉格
万卡万卡
瓦卡布拉格
布拉格
我只想得到只包含“blarg”而不包含其他文本的元素,因此:

 <span>something or other</span>
 <b>blarg</b>
 <b>blarg and stuff</b>
 <span>blarg</span>
 <em>wakka wakka</em>
 <em>wakka blarg</em>
 <em>blarg</em>
blarg
布拉格
布拉格
这里的重要问题是,我试图检查blarg是否仅存在于页面上的一个元素中。我在正则表达式方面有点运气,但我更愿意使用
simple\u html\u dom
这样我也可以查看子元素和兄弟元素


有人知道使用
simple\u html\u dom
最简单的方法是什么吗?

一种方法是解析每个标记,并测试它是否包含“blarg”

下面是一个工作示例:

 <b>blarg</b>
 <span>blarg</span>
 <em>blarg</em> 
$text='something或其他
布拉格
诸如此类
布拉格
万卡万卡
瓦卡布拉格
布拉格';
回显“原文:$Text”;
$html=str_get_html($text);
//查找所有元素
$tags=$html->find('*');
foreach($标记为$key=>$tag){
//如果标签中的文本包含“blarg”
if(strcmp(trim($tag->明文),'blarg')==0){
echo“\$tags[$key]中的'blarg':”$tag->outertext.“;
}
}

我不知道你想做什么,但这可能是一个开始:)

请参考这个问题,它已经回答了。希望它能有所帮助。这看起来是我到目前为止最好的选择,但我认为在simple_html_dom中会有一些更短更干净的东西。我认为有一种方法可以单独使用find()而不必遍历所有元素??好吧,没有。。。我发现很多问题都有相似的答案。。。我正在尝试你的方法,Enissay,但它没有找到“blarg”,即使我知道它在那里(我有HTML输出)。你能想出什么理由吗?我试过大写、小写等,只是为了确保仍然找不到。@zoltar,这段代码对我有用。。。你可以少试一下,你会发现。。。如果你把它整合到你的代码中,我不能说什么不起作用,除非我有完整的代码。。。确保通过添加这些
错误报告(E_ALL)启用错误报告;ini_集('display_errors','1')
$text = '<span>something or other</span>
 <b>blarg</b>
 <b>blarg and stuff</b>
 <span>blarg</span>
 <em>wakka wakka</em>
 <em>wakka blarg</em>
 <em>blarg</em>';

echo  "<div>Original Text: <xmp>$text</xmp></div>";

$html = str_get_html($text);

// Find all elements
$tags = $html->find('*');

foreach ($tags as $key => $tag) {
    // If text in tag contains 'blarg'
    if (strcmp(trim($tag->plaintext),'blarg') == 0) {
        echo  "<div> 'blarg' found in \$tags[$key]: <xmp>".$tag->outertext."</xmp></div>";
    }
}