Powershell 正则表达式复杂模式 (XML)

Powershell Regex Complex Pattern (XML)

我在 XML 中有一个字符串,我正在尝试将其重新运行到一个变量(如下)。

<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>

我的问题是我不了解正则表达式,而且我发现很难理解如何将我的特殊字符转换为 "string",它不会被解释为正则表达式字符。

方括号之间的文字可以是任意长度和任意字符;这就是我想保存到我的变量中的内容,例如"TEXT - I - FIND - INTERESTING".

我也想知道这是否真的是解决这个问题的最佳方法。

如有任何支持,我们将不胜感激。

不要对 XML!

使用正则表达式

在 PowerShell 中使用 XML 的好处是我们可以使用 XPath 来搜索和导航文档。在您的情况下,我会使用 text() 选择器来解析 CDATA 部分的内部值:

$xml = [xml]@'
<root>
    <XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
</root>
'@

$interestingString = $xml.SelectSingleNode('//XMLElement/text()').Value

//XMLElement 表示 "find and <XMLElement> anywhere"

text() 函数很好。这是另一种方式。即使节点不在顶部,这也应该有效。

get-content -raw file.xml | select-xml '//XMLElement' | 
  % { $_.node.'#cdata-section' }

TEXT - I - FIND - INTERESTING

请注意,cdata 部分中的标签将被忽略。示例:

'<script>
  <![CDATA[<message>Welcome to TutorialsPoint</message>]]>
</script>' | select-xml '/script' | % { $_.node.'#cdata-section' }

<message>Welcome to TutorialsPoint</message>