使用xpath查询将xpath正则表达式捕获组作为字符串返回

时间:2015-12-22 20:42:45

标签: php xpath

CONTEXT

假设以下HTML

....
<p>Whatever</p>
<div>Whatever DIV78232 Everwhat</div>
....

问题:

如何返回包含DIVnnnnn的纯文本字符串,其中nnnnn表示任何数字。

到目前为止我的调查:

xPath replace()函数将替换当前DOM中找到的模式。

replace(.,'.*?(DIV\d+).*','$1') => DIV78232

为什么我会被阻止?

因为我希望查询将“DIV78232”作为字符串返回,而实际上根本没有在DOM中替换它,就像它将为查询/p/text()返回“Whatever”一样[我正在尝试所有这些在FirePath firefox-extension]

注意:根据官方DOCS

  

“replace()返回第一个参数的值   子字符串由正则表达式匹配,即正则表达式的值   第二个参数替换为值的替换字符串   第三个论点。“

最终目的

我的最终目的是从这里获取(字符串)与'.*?image:.*?"(.+?)".*'匹配的IMAGE URL(在HTML中):

在这种情况下,查询//*[matches(.,'.*?image:.*?"(.+?)".*','i')]返回整个节点,但我只想要第一个捕获组,它将是IMAGE URL。

<script>...vp&output=xml_vast2&unviewed_position_start=1&
url='+encodeURIComponent(location.href)+'
description_url='+encodeURIComponent(location.href)+'&
image:   "https://domain.com/xxxxxxx/public_images/2015.12/article/56797be1c46188ac438b45c3.jpg", // stretching: 'fi..</script>

1 个答案:

答案 0 :(得分:0)

花了我很长时间,但这是我通过组合 replace() tokenize()

得到的结果

tokenize(replace(.,'.*?image:.*?"(.+?)".*?',':@:$1:@:'),':@:')[2]

返回上述代码段中的图片网址。

为什么/如何运作?

  • 替换()匹配图像并使用我自己的令牌分隔符包装捕获组&#39;:@:&#39; (可能是任何原创的)
  • Tokenize()将被替换的字符串拆分为3个部分,是我正在寻找的第二个捕获组。 (这将是三个部分,因为文件非常不可能包含&#39;:@:&#39;其他地方)

有没有更快的方法来实现这个目标?

感谢。祝一切顺利。和平。