使用正则表达式通过php过滤xpath中的属性

我正在尝试使用匹配其id属性的正则表达式过滤html表。我究竟做错了什么?我正在尝试实现的代码:

        $this->xpath = new DOMXPath($this->dom); 

$this->xpath->registerNamespace("php", "http://php.net/xpath");

$this->xpath->registerPHPFunctions();

foreach($xpath->query("//table[php:function('preg_match', '/post\d+/', @id)]") as $key => $row)

{

}

我得到的错误:preg_match期望第二个参数是一个字符串,给定数组。

回答:

根据DOM(具有命名空间等),属性仍然是一个复杂的元素。采用:

//table[php:function('preg_match', '/post\d+/', string(@id))]

现在,我们需要一个布尔值返回,所以:

function booleanPregMatch($match,$string){

return preg_match($match,$string)>0;

}

$xpath->registerPHPFunctions();

foreach($xpath->query("//table[@id and php:function('booleanPregMatch', '/post\d+/', string(@id))]") as $key => $row){

echo $row->ownerDocument->saveXML($row);

}

顺便说一句:对于更复杂的问题,您当然可以偷偷检查一下这是怎么回事:

//table[php:function('var_dump',@id)]

很遗憾,我们没有可用的XPATH 2.0函数,但是如果您能以更不可靠的方式处理此要求starts-with,我总是更喜欢导入PHP函数。

以上是 使用正则表达式通过php过滤xpath中的属性 的全部内容, 来源链接: utcz.com/qa/414194.html

回到顶部