X-Path + RegEx匹配模式

时间:2013-05-13 08:08:10

标签: regex xpath query-string

鉴于以下内容,

<Line>
    <Supplier>Fuel Surcharge - 36</Supplier>
    <Supplier>Fuel Surcharge - 35</Supplier>
    <Supplier>46081 46150 46250 46280 46286</Supplier>
    <Supplier>Fuel Surcharge - 35451</Supplier>
    <Supplier>46081</Supplier>
</Line>

这里的想法是当节点带有迭代的5位数字时返回“true”。

这是我到目前为止所做的,

matches(./Supplier, "[^(\d{5}\s*)+]");

这里的正则表达式是提取具有或不带空格的5位数的值,无论迭代如何。

我得到的结果都是真的。意味着它在某个地方不对。你能帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:1)

你的表达有两个问题:

  • XPath表达式末尾没有分号(语法错误)。
  • 你的正则表达式搞砸了,它匹配了不包含字符类括号,数字,花括号,数字5,空格以及星号和加号字符的所有内容。
  • fn:matches(xs:string?, xs:string)需要两个字符串作为参数,您需要为第一个字符串传递一系列字符串。

要为轴步骤中的每个节点调用函数,请将其添加为另一个(仅限XPath 2.0及更高版本)。您可以在参数中使用点.(上下文)。

尝试类似

的内容
./Supplier/matches(., "^(\d{5}\s*)+$")

对于第三和第五行将产生true。如果它必须包含(并且不完全构造)fife-digit-numbers和spaces的重复模式,请从正则表达式中删除^$。< / p>

答案 1 :(得分:0)

试试这个:matches(./Supplier, '(.*)((\d{5}(\s*))+)(.*)')