ruby – 用于正则表达式匹配的xpath表达式?

前端之家收集整理的这篇文章主要介绍了ruby – 用于正则表达式匹配的xpath表达式?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要搜索具有某种模式的html文档中的div id.
我想在正则表达式中匹配这个模式:
foo_([[:digit:]]{1.8})

使用xpath.上述模式的xpath相当于什么?

我被卡在// div [@ id =“foo_然后什么?如果有人可以继续为其表达法律.

编辑

对不起,我想我必须详细说明一下.其实不是foo_,它是post_message_

Btw,我用机械/ nokogiri(红宝石)

这是代码段:

html_doc = Nokogiri::HTML(open(myfile))
message_div =  html_doc.xpath('//div[substring(@id,13) = "post_message_" and substring-after(@id,"post_message_") => 0 and substring-after(@id,"post_message_") <= 99999999]')

仍然失败错误信息:

Couldn’t evaluate expression ‘//div[substring(@id,"post_message_") <= 99999999]‘ (Nokogiri::XML::XPath::SyntaxError)

解决方法

这个怎么样(更新):

XPath 1.0:

"//div[substring-before(@id,'_') = 'foo' 
       and substring-after(@id,'_') >= 0 
       and substring-after(@id,'_') <= 99999999]"

编辑#2:OP对问题进行了更改.以下,XPath 1.0表达式更为简化:

"//div[substring(@id,1,13) = 'post_message_' 
       and substring(@id,14) >= 0 
       and substring(@id,14) <= 99999999]"

XPath 2.0有一个方便的matches() function

"//div[matches(@id,'^foo_\d{1,8}$')]"

除了更好的可移植性,我希望数值表达式(XPath 1.0样式)的表现要好于正则表达式测试,尽管这只会在处理大数据集时变得明显.

原始版本的答案:

"//div[substring-before(@id,'_') = 'foo' 
       and number(substring-after(@id,'_')) = substring-after(@id,'_') 
       and number(substring-after(@id,'_')) &gt;= 0 
       and number(substring-after(@id,'_')) &lt;= 99999999]"

使用number()函数是不必要的,因为数学比较运算符隐含地将它们的参数强制转换为数字,任何非数字将变为NaN,并且大于/小于测试将失败.

我还删除了尖括号的编码,因为这是XML要求,而不是XPath要求.

猜你在找的Ruby相关文章