Ruby s =~ /(.)\1/

plasmiq · 2012年12月05日 · 最后由 zhuangya 回复于 2012年12月07日 · 1857 次阅读

s =~ /(.)\1/ # look for a double letter

这段咋理解啊,直接 Orz 了……

正则表达式 (.) 表示分组,后边的\1表示前边找到的第一组的那个,所以就是两个一样的了,不过应该不一定是两个相同的字母吧。。 可以改为/([a-zA-Z])\1/ 返回找到的下标,找不到就返回 nil。。

不知道说的有没有问题:)

s.sub!(/(.)(.)/,'\2\1')

匿名 #3 2012年12月07日

/(.)\1/

里面 . 是任意字符,而它又被捕获到了 \1 里面,所以查找到的内容一定是类似于

aa bb ww 这样的

但是因为又用的是 . 所以 ]] 这样也可以匹配上。

所以是一样的字幕 cc @Tony612

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