如何指定一个适用于英语以外的欧洲语言的正则表达式字符范围?

我正在使用Ruby的正则表达式引擎。 我需要编写一个执行此操作的正则表达式

WIKI_WORD = /\b([az][\w_]+\.)?[AZ][az]+[AZ]\w*\b/ 

除了英语之外,还可以使用其他欧洲语言。 我不认为字符范围[az]会覆盖德语等小写字母。

 WIKI_WORD = /\b(\p{Ll}\w+\.)?\p{Lu}\p{Ll}+\p{Lu}\w*\b/u 

应该在Ruby 1.9中工作。 \p{Lu}\p{Ll}是大写和小写Unicode字母的缩写。 ( \w已包含下划线)

另请参阅此答案 – 您可能需要以UTF-8模式运行Ruby才能实现此function,并且您的脚本也必须以UTF-8编码。

James Gray撰写了一系列关于使用Unicode,UTF-8和Ruby 1.8.7和1.9.2的文章。 他们是重要的阅读。

使用Ruby 1.8.7,我们可以添加:

 #!/usr/bin/ruby -kU require 'jcode' 

并获得部分UTF-8支持。

使用1.9.2,您可以使用:

 # encoding: UTF-8 

作为源文件的第二行,它将告诉Ruby默认为UTF-8。 格雷的建议是我们从现在开始编写所有来源。

这不会影响读/写文本时的外部编码,只会影响源代码的编码。

Ruby 1.9.2没有扩展通常的\w\W\s字符类来处理UTF-8或Unicode。 正如其他评论和答案所说,只有正则表达式中的POSIX和Unicode字符集才能做到这一点。