regex - 如何使用 XSLT 中的 RegEx 检查 xml textnode 是否包含中文字符

标签 regex xslt unicode xslt-2.0 saxon

在此网站上http://gskinner.com/RegExr/ (这是一个正则表达式测试网站)这个正则表达式匹配有效 匹配: [^\x00-\xff]
示例文本:test123 或元件数据不可用

但是如果我有这个输入 XML:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <node>test123 或元件数据不可用</node>
</root>

我用 Saxon 9 尝试这个 XSLT 2.0 样式表:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/root/node">
    <xsl:if test="matches(., '[^\x00-\xff]')">
      <xsl:text>Text has chinese characters!</xsl:text>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

Saxon 9 给我以下错误输出:

    FORX0002: Error at character 3 in regular expression "[^\x00-\xff]": invalid escape sequence
  Failed to compile stylesheet. 1 error detected.

如何检查 XSLT 2.0 中的中文字符?

最佳答案

XPath 支持的正则表达式方言基于 XSD 中定义的方言:您可以在 W3C 文档中找到完整规范,或者如果您喜欢更具可读性的内容,请在我的 XSLT 2.0 程序员引用中找到。不要假设所有正则表达式方言都是相同的。 XPath 正则表达式中没有 \x 转义,因为它是为嵌入 XML 而设计的,而 XML 已经提供了 &#xHHHH;

您可能会发现使用命名的 Unicode block 比使用十六进制范围更方便,例如 \p{IsCJKUnifiedIdeographs}

另请参阅What's the complete range for Chinese characters in Unicode?

关于regex - 如何使用 XSLT 中的 RegEx 检查 xml textnode 是否包含中文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611839/

相关文章:

c++ - 如何散列 std::regex?

用于元素集合的 XSLT for-each 循环

c++ - 为什么 towlower() 函数不将 Я 转换为小写 я?

java 。用于解析 FTP 服务器列表的正则表达式

regex - 如何在 Eclipse 中保存查找/替换设置?

regex - 如何仅匹配一个字母词

xml - 您可以使用 XSL 将行分隔列表转换为正确的 xhtml 列表吗?

xml - 如何摆脱 XSLT 输出中的 xmlns =""(无命名空间)属性

c++ - 在 Qt 中,如何将 Unicode 代码点 U+1F64B 转换为包含等效字符 "🙋"的 QString?

python - 如何在python 2.6中打印unicode中文字符串?