Ruby 神奇的空格

frankel · 发布于 2012年04月11日 · 最后由 zw963 回复于 2012年04月13日 · 5068 次阅读
291

正在做一个正则匹配,想用\s来找出文字中的某些空格,可是明明正则没写错,就是没有匹配,发现原来某个看上去是空格的字符,实际没有被ruby认做空格。感觉好奇怪。

本来想提交测试例子的,可是在ruby-china提交后,渲染出来的都是普通空格了。

请教下这是什么原因,谢谢

共收到 7 条回复
96

如果不能用文字展现,就用贴个图片吧

96

有可能是 unicode 中的空格(参看这个表),它们不会被 \s 匹配。

1

前几天我也遇到了,用nokogiri处理过的html, 会被unicode nbsp替换 http://en.wikipedia.org/wiki/Non-breaking_space

291

的确是nokogiri引起的,用如下方法解决:

nbsp = Nokogiri::HTML(" ").text
text.gsub(/#{nbsp}/, '')

291

后来发现一个ruby1.9里针对所有空格的正则:[[:blank:]]

甚至包括全角的空格(unicode 12288),比自己写各种类型的空格更有效

1031

#5楼 @frankel

正因为如此, 正则推荐尽量使用字符集合的实现方式.

[:alnum:] 英文大小写字符及数字,即 0-9, A-Z, a-z [:alpha:] 任何英文大小写字符,即 A-Z, a-z [:ascii:] 七位ASCII, 包括非打印字符. [:blank:] 穸格键与Tab键 [:cntrl:] 控制字符,包括 CR, LF, Tab, Del.. 等等 [:digit:] 数字,即 0-9 [:graph:] 可见图形字符(可打印字符),即除了空格键和TAB键以外的其他所有字符 [:upper:] 代表大写字符,即 A-Z [:lower:] 小写字符,即 a-z [:print:] 任何可打印字符, 包含空格和tab. [:punct:] 除了:space:及:alnum:以外的所有可打印字符.一般为标点符号(punctuation symbol),即:" ' ? ! ; : # $等 [:space:] 任何会产生空白的任何字符,包括空格键, Tab, CR(回车) 等等 [:xdigit:] 代表16进制数字类型,即: 0-9, A-F, a-f [:word:] 匹配单词的字符,等价于\w (单词的定义跟字符集有关)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册