匹配不同字母表中的字母

下面的示例在 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"