使用正则表达式获取 Nokogiri 节点

Using a regex to get a Nokogiri node

我正在使用 Nokogiri 解析 XML 文件。

目前,我正在使用以下方法获取我需要的值(文档包含多个 Phase 节点):

xml.xpath("//Phase[@text=' = STER P=P(T)         ']")

但是现在,上传的 XML 文件可以有一个具有不同值的 text 属性。因此,我正在尝试使用正则表达式更新我的代码,因为该值始终包含 STER.

看了一些关于 SO 的问题后,我尝试了

xml.xpath("//Phase[@text~=/STER/]")

然而,当我 运行 它时,我得到

ERROR: Invalid predicate: //Phase[@text~=/STER/] (Nokogiri::XML::XPath::SyntaxError)

我在这里错过了什么?

或者,是否有类似于 starts-with 的 XPATH 函数在整个值中查找子字符串,而不仅仅是在它的开头?

您的代码有两个问题:首先,there is no =~ operator in XPath. The way to test whether text matches a regex is using the matches function:

//Phase[matches(@text, 'STER')]

其次,regex matching is a feature of XPath 2.0, but Nokogiri implements XPath 1.0

幸运的是,您实际上并没有使用任何正则表达式功能,您只是检查一个固定的字符串,这可以通过使用 contains function:

的 XPath 1.0 来完成
//Phase[contains(@text, 'STER')]