gpt4 book ai didi

php - 使用 DOMDocument 和 DOMXPath 如何忽略匹配的某些字符?

转载 作者:搜寻专家 更新时间:2023-10-31 21:38:50 24 4
gpt4 key购买 nike

我正在使用 DOMDocumentDOMXPath确定我的 HTML 内容中是否存在某些短语(关键字短语),例如搜索关键字是否为粗体。我使用以下代码并且工作正常,除了在搜索关键字时我需要“忽略”一些字符。使用以下代码:

$characters_to_ignore = array(':','(',')','/');
$keyword = 'keyword AAA';
$content = "Some HTML content for example <b>keyword: AAA</b> and other HTML";
$exp = '//b[contains(., "' . $keyword . '")]|//strong[contains(., "' . $keyword . '")]|//span[contains(@style, "bold") and contains(., "' . $keyword . '")]';

$doc = new DOMDocument();
$doc->loadHTML(strtolower($content));
$xpath = new DOMXPath($doc);
$elements = $xpath->query($exp);

我需要识别“关键字:AAA”和“关键字 AAA”,因此我需要指定 DOMXPath 查询以在搜索关键字短语时忽略变量 $characters_to_ignore 中的字符。

前面的代码对于“关键字 AAA”工作正常,我如何更改它以匹配“关键字:AAA”? (以及 $characters_to_ignore 中的任何字符)

新信息:也许使用 this

fn:contains(string1,string2)

但我找不到一个有效的例子。

最佳答案

好吧,您可能已经以某种方式解决了它,但这是解决方案...

使用 XPath 2.0 方法 matches() 会很简单,但是 PHP DOMXPath 类目前仅支持 XPath 1.0。

但是从 PHP 5.3 开始,DOMXPath 类有 registerPHPFunctions()允许我们将 PHP 函数用作 XPath 函数的方法。 :)

让它发挥作用:

$keyword = 'AAA';
$regex = "|keyword[:()/]? $keyword|";
$content = "Some HTML content for example <b>keyword: AAA</b> and other HTML";
$exp = "//b[php:functionString('preg_match', '$regex', .)]|//strong[php:functionString('preg_match', '$regex', .)]|//span[contains(@style, 'bold') and php:functionString('preg_match', '$regex', .)]";

$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DOMXPath($doc);
$xpath->registerNamespace('php', 'http://php.net/xpath');
$xpath->registerPHPFunctions();
$elements = $xpath->query($exp);

关于php - 使用 DOMDocument 和 DOMXPath 如何忽略匹配的某些字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com