【发布时间】:2010-12-04 23:52:11
【问题描述】:
看看这个:
"nAo".match(/(nao)/i) # => #<MatchData "nAo" 1:"nAo">
"nÃo".match(/(não)/i) # => nil
有办法解决吗?
编辑: 在与 i 标志(忽略大小写)进行正则表达式比较时,ruby 似乎缺乏对 unicode 字符的支持...... 使用 MRI 1.8.7p249
【问题讨论】:
-
检查您在问题中的假设并相应地更新它。从上面可以看出,Ruby 并没有将 Ã 和 ã 识别为大小写相关,仅此而已。其中,虽然仍然是一个问题,但却是一个不同的问题。
-
Perl 当然可以对 Unicode 应用不区分大小写。默认情况下,它不执行 NFD 样式的规范等价,而是
chr(0x17F) =~ /s/i,例如,其中 017F 是 LATIN SMALL LETTER LONG S。类似地,"N\N{U+C3}O" =~ /n\N{U+E3}o/i。要处理带有组合标记的替代表示,您需要先将模式和字符串都转换为 NFD(规范分解)。 -
我不熟悉 unicode 问题,但最好提一下您使用的 Ruby 版本。
-
@tchrist,你的意思是“Perl”还是“Ruby”?毕竟这是一个 Ruby 问题。
标签: ruby regex unicode case-insensitive