繁体   English   中英

有没有办法对带波浪号的字符使用正则表达式匹配?

[英]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取代了旧的正则表达式引擎。

http://www.geocities.jp/kosako3/oniguruma/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM