0

以下のようなコードがあります。commentメソッドは、 でコメントが発生するたびに呼び出されhtmlます。次に、正規表現の一致を行っています。解析されたコメント内の一致の数を数えたいと思います。以下のような印刷

1
2
3
4
5

5私が望むのは、それが一致の総数であるため、単に印刷することです。誰か助けてくれませんか。

class PlainTextExtractor < Nokogiri::XML::SAX::Document
  def comment(string)
    # I am defining some regexp here 
    m = Regexp.new(re, Regexp::IGNORECASE);
    if m.match(string)
      $count += 1
      puts $count 
    end
  end
end

parser = Nokogiri::HTML::SAX::Parser.new(PlainTextExtractor.new)
parser.parse_memory(html)
4

3 に答える 3

1

puts $countループの外に移動するだけです。パーサーを呼び出した後、最後に置くことができます。

于 2012-06-29T11:02:52.677 に答える
0

あなたができる試合の数だけに興味があるなら

m = Regexp.new(re, Regexp::IGNORECASE);
puts string.scan(m).length
于 2012-06-27T18:44:28.327 に答える
0

1 つの方法は、クラスに @count などのインスタンス変数で内部的に一致数をカウントさせることです。次に、attr_reader を使用してメソッドを作成し、最後にその値を読み取ることができるようにします。また、グローバル変数は必要ありません。例 (テストされていません):

class PlainTextExtractor < Nokogiri::XML::SAX::Document
  attr_reader :count
  def comment(string)
    # I am defining some regexp here 
    m = Regexp.new(re, Regexp::IGNORECASE);
    if m.match(string)
      @count += 1
    end
  end
end

pt_extractor = PlainTextExtractor.new
parser = Nokogiri::HTML::SAX::Parser.new(pt_extractor)
parser.parse_memory(html)
puts pt_extractor.count
于 2012-06-27T22:10:12.373 に答える