[英]Is there a way to use regexp match for characters with tilde?
看这个:
"nAo".match(/(nao)/i) # => #<MatchData "nAo" 1:"nAo">
"nÃo".match(/(não)/i) # => nil
有办法解决吗?
编辑:似乎红宝石缺乏对带有i标志的正则表达式比较中的Unicode字符的支持(忽略大小写)...使用MRI 1.8.7p249
不了解Ruby,但大多数正则表达式引擎不了解非ASCII字符的大写/小写。 您能做的最好的事情是:
/(n[ãÃ]o)/
了解大写/小写关系的问题在于它取决于语言。 Unicode仅编码字符的形式,而不编码含义。 因此,unicode中的大写字符可以根据语言而具有不同的小写字符。
以SS
为例。 在英语中,小写字母是ss
而在德语中,它可以是ß
。 另一个示例是字母I
,英语中的字母小写i
但在土耳其语中的小写字母ı
(不带点)。 这是因为土耳其语中的i
具有大写的İ
( İ
)。
因此,大多数正则表达式实现都只是放弃并拒绝理解标准ASCII之外字符的大写/小写关系。
尝试找到一些用于Ruby的unicode规范化模块。
请注意,从1.9开始,Ruby便提供了更好的字符支持(好像您在运行Ruby 1.8.7)。 Ruby 1.9中的Oniguruma取代了旧的正则表达式引擎。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.