解析 \p{IsBasicLatin} 字符 属性 时 Ruby 出现 RegexpError

RegexpError in Ruby when parsing \p{IsBasicLatin} character property

我正在使用 JRuby 1.7.18,甚至在 JRuby 9000(最新版本)中尝试过此操作,但我遇到了同样的错误。我正在使用 soap-4rnokogiri 库来解析 wsdl xml 文件。

wsdl 的以下部分被解析时

<xs:pattern value="[\p{IsBasicLatin}]*"/>

我收到以下错误

RegexpError: (RegexpError) invalid character property name <IsBasicLatin>: /\A[\p{IsBasicLatin}]*\z/n
nokogiri/XmlSaxParserContext.java:252:in `parse_with'
nokogiri/XmlSaxParserContext.java:252:in `parse_with'
nokogiri/XmlSaxParserContext.java:252:in `parse_with'

在 Ruby 1.9 中,它是 JRuby 1.7.18 兼容的 Ruby 版本之一,我读到像 \p{IsBasicLatin} 这样的字符块是不支持。但支持像 \p{Latin} 这样的脚本。我试过将 IsBasicLatin 更改为 Latin,甚至尝试了其他一些,例如 InBasicLatinInBasic_Latin,但它们都 return 相同的错误。

这在 JRuby 1.7.18 和最新版本的 JRuby 9000 中都有。

这里出了什么问题,我该如何解决?

如评论中所述,角色名称 属性 实际上是 In_Basic_Latin 而不是 IsBasicLatin。 Ruby 的现代版本(具体来说是 MRI 或 CRuby)使用正则表达式库 Onigmo。官方 Ruby 文档没有列出所有 Unicode 属性,但幸运的是 Onigmo does.

显然 JRuby 似乎没有实现(至少)Unicode 块。然而,关于方块的信息(名称和范围)是 publicly accessible\p{In_Basic_Latin} 因此等同于 [\u0000-\u007F][[:ascii:]].

也是