匹配不同字母表中的字母
下面的示例在 Ruby 中给出,但是相同的匹配器应该以任何现代语言提供。
假设我们有字符串 AℵNaïve
,由 Messy Artificial Intelligence 制作。它由字母组成,但通用\w
匹配器不匹配:
▶ "AℵNaïve"[/\w+/]
#⇒ "A"
将 Unicode 字母与组合标记匹配的正确方法是使用\X
指定字形集群。但是,Ruby 有一个警告。Onigmo,Ruby 的正则表达式引擎,仍然使用字形集群的旧定义 。它尚未更新为 Unicode 标准附件 29 中定义的扩展字形集群 。
所以,对于 Ruby 我们可以有一个解决方法:\p{L}
几乎可以做得很好,除了它在 i
上的组合变音符号上失败:
▶ "AℵNaïve"[/\p{L}+/]
#⇒ "AℵNai"
通过在表达式中添加标记符号,我们可以最终匹配所有内容:
▶ "AℵNaïve"[/[\p{L}\p{M}]+/]
#⇒ "AℵNaïve"