Ruby s =~ /(.)\1/

plasmiq · December 05, 2012 · Last by zhuangya replied at December 07, 2012 · 1854 hits

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

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

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

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

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

Unknow user #3 December 07, 2012

/(.)\1/

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

aa bb ww 这样的

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

所以是一样的字幕 cc @Tony612

You need to Sign in before reply, if you don't have an account, please Sign up first.