编写正则表达式以标识输入是否采用XPath语法

时间:2016-12-21 20:49:09

标签: regex xpath

我可以使用一些帮助来提供一种解决方案来识别XPath格式的输入。让我们说输入看起来像这样:

//*[@id="" or @text="i love stackoverflow" or @name="oh yea" or @class=some-css-class"]

但是这样做的挑战是XPath值会发生巨大变化。如果您有任何建议,请告诉我们。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以测试输入字符串是否是有效的XPath表达式,如下所示:

$string = '//*[@id="" or @text="i love stackoverflow" or @name="oh yea" or @class="some-css-class"]'
try{
    $null = [System.Xml.XPath.XPathExpression]::Compile($string)
    # $string is valid XPath
} 
catch {
    # $string is not valid XPath
}

答案 1 :(得分:1)

你需要注意一些计算机科学理论。正则表达式只能分析有限类语法的句子,并且XPath的语法太复杂而不适合该类。您可以识别XPath的一个简单子集,如果它对您有用,但您最好的选择是使用现成的XPath解析器并查看它是否接受该表达式是有效的。 (您还需要考虑XPath在语义上是否有效,例如它是否包含未声明的变量引用或名称空间前缀?)