Ruby 求个正则的写法

tsinghan · 2014年01月09日 · 最后由 doitian 回复于 2014年01月09日 · 2743 次阅读

#######sss######## 不管外层有多少##,我需要取出 #sss# 这段内容出来,其实就是取微博的话题。

(#+)[^#]+\1 ?

"#######sss########"[/\#{1}\w+\#{1}/]

这样?

replace("#", "")

#1 楼 @bhuztez #2 楼 @messiahxu #3 楼 @LiKour 刚试了试好像不对奥 我需要的结果是 #sss#

#4 楼 @TsingHan [59] pry(main)> "#######sss########"[/#{1}\w+#{1}/] => "#sss#"

#5 楼 @messiahxu 你的是 2.0 吗?我是 1.9

[1] pry(main)> "#######sss########"[/#{1}\w+#{1}/]
=> nil

#6 楼 @TsingHan 我是 2.1 的,1.9 的话,你在 # 前面加上转义字符试试? 不对啊,怎么粘贴的时候,转义字符丢掉了,我这里是要加上去的

#7 楼 @messiahxu thx,😄

pry(main)> "#######sss########"[/\#{1}\w+\#{1}/]
=> "#sss#"

"#######sss########"[/#\w+#/] 就行啊,问题是你得确定 \w+ 够用,比如中间没有空格什么的

#8 楼 @TsingHan 如果是 这个需求呢“####ss###########sss###”只要是#..#中间的都输出。得到 #ss# 和 #sss#

#9 楼 @WolfLee 恩 可以的。如果是 这个需求呢“####ss###########sss###”只要是#..#中间的都输出。得到 #ss# 和 #sss#

#10 楼 @TsingHan 换成 "".scan() 结果就是数组了

sss 中间有特殊字符就不行了哦

#13 楼 @michael_roshen #12 楼 @zj0713001 #9 楼 @WolfLee #7 楼 @messiahxu 额,确实是 中间有特殊字符就不行了

pry(main)> "#######ss%ws#####ss###"[/#\w+#/]
=> "#ss#"

#14 楼 @TsingHan 这个只能自己手动加入允许的特殊字符了,否则...

'#######sss######## 不管外层有多少##,我需要取出 #sss# 这段内容出来,其 实就是取微博的话题.#######ss%ws#####ss###'.scan /(?=#*)(?=#([^#]+)#)(?=#*)/
#=> [["sss"], [" 不管外层有多少"], [",我需要取出 "], ["sss"], [" 这段内容出来,其实就是取微博的话题."], ["ss%ws"], ["ss"]]
``

str.scan(/(?<=#)[^#]+(?=#)/)

看看这个如何

#16 楼 @kevinxu #15 楼 @saiga 恩 可以 多谢几位,回头补习一下正则

所以说你得确定一个范围,/#[^#]+#/ 足够暴力你取出很多不想要的...

"#######ss%ws#####ss###".scan /#[^#]+#/
需要 登录 后方可回复, 如果你还没有账号请 注册新账号