如何解决XSLT-正则表达式中的花括号
下面是实际的字符串:
//Some_string,"some_string_1":"target_string"},some_other_string//
以下是我要使用的正则表达式模式:
<xsl:analyze-string select="text_node/text()" regex=",("some_string_1":.*?)"}">
<xsl:matching-substring>
<xsl:value-of select="substring-after(regex-group(1),':"')"/>
</xsl:matching-substring>
</xsl:analyze-string>
我提取的子字符串应该是“ target_string”
但是我遇到了以下错误
Fatal error during transformation using //my_path: Closing curly brace in attribute value template ",("some_string_1":.*?)"}" must be doubled;
我也尝试使用双花括号,但没有用
注意-我正在使用Ant脚本通过saxon-he-10.1.jar运行XSLT
谢谢!
解决方法
我倾向于将正则表达式放入xs:string
类型的参数或变量中,例如
<xsl:param name="pattern" as="xs:string">,("some_string_1":(.*?))"}</xsl:param>
然后我可以使用
<xsl:analyze-string select="." regex="{$pattern}">
<xsl:matching-substring>
<xsl:value-of select="regex-group(2)"/>
</xsl:matching-substring>
</xsl:analyze-string>
在这里,我不必担心在regex
属性之类的属性值模板中转义。
请注意,如果您使用XSLT 3,则更安全
<xsl:param name="pattern" as="xs:string" expand-text="no">,("some_string_1":(.*?))"}</xsl:param>
避免在树上插入任何更高的文本值模板。
,您需要将大括号加倍,因为它在XSLT中具有特殊含义,而对它进行转义是因为它在正则表达式中具有特殊含义:
",("some_string_1":.*?)"\}}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。