Ruby 1.9.3正则表达式utf8 \ w重音字符

时间:2013-02-13 10:22:52

标签: ruby regex encoding utf-8

如何确保Regexp中的\ w处理与普通字母相同的国家字母?

'ein grüner Hund'.scan(/\S+/u)
  

[“ein”,“grüner”,“Hund”]

它正确扫描“ü”为非空白字符。

'ein grüner Hund'.scan(/\w+/u)
  

[“ein”,“gr”,“ner”,“Hund”]

如何获得“ü”?

我需要一个解决方案,不仅适用于德语,法语和波兰语,也应该有效。

2 个答案:

答案 0 :(得分:2)

\w适用于字母或数字或下划线。您的正则表达式引擎可能会将单个Unicode代码点视为单个字符。在这种情况下,ü将不会匹配为单个字符,因为它是多个代码点字符(编码为两个代码点)。为了匹配多个代码点字符,请使用匹配单个unicode字形的\X,无论是单个代码点还是多个代码点。

查看this了解详情。

我不确定Ruby是否支持\X。否则\p{L}\p{M}*可以使用,它与字母和重音匹配。

答案 1 :(得分:1)

尝试

'ein grüner Hund'.scan(/[[:word:]]+/u)

Documentation