Regex 正则表达式:XPATH字符串是否指向属性?
我使用的是:“.+/@[^/]+$”。你能想一个为什么这可能不起作用的原因吗?这实际上是一个非常微妙的问题,我认为这是一个很好的问题 我的理解是,(缩写的)XPATH指向一个属性,当且仅当它的最后一个Regex 正则表达式:XPATH字符串是否指向属性?,regex,xpath,attributes,Regex,Xpath,Attributes,我使用的是:“.+/@[^/]+$”。你能想一个为什么这可能不起作用的原因吗?这实际上是一个非常微妙的问题,我认为这是一个很好的问题 我的理解是,(缩写的)XPATH指向一个属性,当且仅当它的最后一个@不在谓词中时,也就是说,它的形式是[…],后面没有任何步骤(比如/…)。我认为它有一个相对简单的正则表达式@[^]/]*$,也就是说,必须有一个@后面没有]或/的正则表达式。另外,如果您想涵盖未命名的XPath,可以使用(@|属性::)[^]/]*$ 我已经包括了一个测试线束,它可能在检查这个或其
@
不在谓词中时,也就是说,它的形式是[…]
,后面没有任何步骤(比如/…
)。我认为它有一个相对简单的正则表达式@[^]/]*$
,也就是说,必须有一个@
后面没有]
或/
的正则表达式。另外,如果您想涵盖未命名的XPath,可以使用(@|属性::)[^]/]*$
我已经包括了一个测试线束,它可能在检查这个或其他测试时被证明是有用的。还要注意,标记之间可能有空格,这会使某些正则表达式复杂化
肯定的(属性)
或@*
或@a
或。/@a
a/@b
a[@b和@c]/@d
a[b[@c=“d”]/e[@f和@g]]/h[@i=“j”]/@k
或a[@b]
a[@b和@c]
a[b[@c和@d]/@e]
a[b[@c=“d”]/e[@f和@g]]/h[@i=“j”]/k[5][@l=“m”]
/
但没有]
的法律例子,但我认为可能有一个
希望这些示例至少能清楚地表明,[
和]
以及@
之间的任意嵌套。幸运的是,我认为只有最后一个@
及其嵌套级别才重要
(作为参考,OP的正则表达式在@a
上失败。我原来的正则表达式在a[@b和@c]
上失败)
编辑:事实证明,有更多的角情况,这让我确信,没有完全正确的正则表达式。例如,一旦有了属性节点,就有许多方法可以保留它,例如缩写语法中的
/@a//
或/@a/
。还有多种更具创造性的方法,例如/@f//[node()]
。总而言之,如果您想涵盖这些情况,您需要能够匹配[
和]
,而这是基本正则表达式无法做到的。另一方面,你可能会觉得这太做作了…我认为它对选择上下文节点的“attr”属性的@attr
不起作用。哦,很好的工作。这是两个完美的边缘案例供我思考。谢谢这在简单的情况下是失败的:@*[name()!='foo]
或@a[祖先::p]
@Tomalak:当然,你是对的。我坚持我的观点,事实上没有正则表达式可以工作,因为它必须跟踪嵌套。。。