作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 开档和读档问题
时间Sat Dec 16 12:33:50 2006
※ 引述《skyboy (yes i do...)》之铭言:
抱歉,我觉得这种东西应该拿到讨论板上讨论 :)
: $1刚刚已经看过网页 得知是存value,
: 那$~是存MatchData object, 也就是後面regular expression中的( )
不,$~ 是存「整个」match 而不是 () 里的东西,$数字 才是
也就是,$1 是第一个 () 内的,$2 是第二个 () 内的,依此类推
而 $1 == $~[1]
$2 == $~[2]
etc.
: 那我可以在一个regular expression中, 分别找出分别要的东西和他的个数总和吗?
: 那如果是可以的话, 他是存在hash里的哪个位置?
前一个答案是理所当然,後一个答案是,看你怎麽存到 hash 中的
既然你熟悉 C/C++, 应该知道 hash or map 吧?
Ruby 的 hash 就是 key => value 的对应,跟 regular expression 本身没有关系
: 以上面的例子, 如果content =~/\d+-(\w*\s\w*)(\d+\d+)\s*/
: 那表示我要抓 (1)这个 (2)和这个出来
: 可以分别对 (1) 和 (2) 计算他总共出现几次吗??
$1 对应第一个括号内的东西,$2 对应第二个括号内的东西
你要分别计算次数,可以开两个 hash 出来
hashes = [Hash.new(0), Hash.new(0)]
hashes[0][$1] += 1
hashes[1][$2] += 1
etc.
: 如果可以, 下面的
: hash.to_a.sort {|x,y| y[1] <=> x[1]}.each do |w,c|
: puts "#{w} : #{c} times"
: end
: 又该如何分别取出值呢?
不是如何取出值,就像上面所说的,重点是你怎麽存进去的
以该网页的储存法,并没有办法取出你所要的资料
因为那里的做法,只存了一个 key 和 value 的对应
你可以像我上面说的那样,开两个 Hash 出来储存
或是如果你不介意 (1) 和 (2) 可能会重叠,直接用一个 hash 去存也可
hash[$1] += 1
hash[$2] += 1
单单像这样就好,这样你取出的地方也不必做修改
只是如果你 $1 和 $2 重复了,那他们会一起算次数
如 (1) 是 Ruby, (2) 也是 Ruby, 那麽算出来的就会是 2 而不是个别 1
--
生死去来、棚头傀儡、一线断时、落落磊磊
《花镜》-世阿弥
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.83.41