像.//div[@id='foo\d+]
这样的东西可以使用id='foo123'
捕获div标签。
如果重要的话,我正在使用.NET。
答案 0 :(得分:91)
正如其他答案所述, XPath 1.0不支持正则表达式。
尽管如此,您还有以下选项:
starts-with()
和translate()
函数),如下所示:.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
使用EXSLT.NET - 有办法use its functions directly in XPath expressions without having to use XSLT。允许使用RegEx-es的EXSLT扩展函数包括:regexp:match()
,regexp:replace()
和regexp:test()
使用 XPath 2.0 / XSLT 2.0及其inbuilt support for regular expressions(函数matches(),replace()和{{3 }})
答案 1 :(得分:28)
XPath 2.0有一些支持正则表达式的函数:matches()
,replace()
,tokenize()
。
在XPath 1.0中没有正则表达式支持。
对于.NET,您可以使用Saxon.Net中的XPath引擎来支持XPath 2.0。
因此,如果在Saxon.NET中使用XPath 2.0引擎,那么您的示例将转向:.//div[matches(@id,'foo\d+')]
。
答案 2 :(得分:2)
在.NET中,您可以通过扩展对象访问自定义类(因此,如果您可以根据需要对其进行适当编码,则可以使用正则表达式。)
教程here。
答案 3 :(得分:0)
我也想这样做,所以创建了我自己的基本xpath module。