dubstep
1
Issue #5606 has been reported by Tomoaki N…
Feature #5606: String#each_match(regexp)
Author: Tomoaki N.
Status: Open
Priority: Low
Assignee:
Category:
Target version:
文字列上の正規表現に一致する場所のoffsetを順に処理できるような
イテレータが欲しかったのですが、
ざっと検索すると1996年
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1206
の昔から話はあり、
全くないという事はなくて、それなりに需要がありそうです。
class String
def each_match(pattern, offset=0)
while(m = self.match(pattern, offset))
offset = m.begin(0)+1
yield m
end
end
end
いかがしょうか?
対称にはRegexp#each_matchもですが、、
Issue #5606 has been updated by Yui NARUSE.
String#scan ではダメな理由を、ユースケースを添えて示す必要があると思います。
Feature #5606: String#each_match(regexp)
Author: Tomoaki N.
Status: Open
Priority: Low
Assignee:
Category:
Target version:
文字列上の正規表現に一致する場所のoffsetを順に処理できるような
イテレータが欲しかったのですが、
ざっと検索すると1996年
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1206
の昔から話はあり、
全くないという事はなくて、それなりに需要がありそうです。
class String
def each_match(pattern, offset=0)
while(m = self.match(pattern, offset))
offset = m.begin(0)+1
yield m
end
end
end
いかがしょうか?
対称にはRegexp#each_matchもですが、、
Issue #5606 has been updated by Tomoaki N…
長い配列中のモチーフの存在位置のリストを作りたいので、位置(offset)が必要です。
String#scan ではダメかというと
longstring.scan(regex) do |matchstr|
m=Regexp.last_match
…
puts “#{m.begin(0)}-#{m.end(0)-1} some other info”
end
でとれば確かにとれるらしいけど、いかにもトリッキーな気がしますので、直接的に
longstring.each_match(regex) do |m|
…
puts “#{m.begin(0)}-#{m.end(0)-1} some other info”
end
と書ける方がうれしいです。
Feature #5606: String#each_match(regexp)
Author: Tomoaki N.
Status: Open
Priority: Low
Assignee:
Category:
Target version:
文字列上の正規表現に一致する場所のoffsetを順に処理できるような
イテレータが欲しかったのですが、
ざっと検索すると1996年
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1206
の昔から話はあり、
全くないという事はなくて、それなりに需要がありそうです。
class String
def each_match(pattern, offset=0)
while(m = self.match(pattern, offset))
offset = m.begin(0)+1
yield m
end
end
end
いかがしょうか?
対称にはRegexp#each_matchもですが、、
Issue #5606 has been updated by mame (Yusuke E.).
Status changed from Open to Feedback
遠藤です。
2011年11月10日17:19 Tomoaki N. [email protected]:
String#scan ではダメかというと
longstring.scan(regex) do |matchstr|
m=Regexp.last_match
…
puts “#{m.begin(0)}-#{m.end(0)-1} some other info”
end
でとれば確かにとれるらしいけど、いかにもトリッキーな気がしますので、
$~ を使うのが普通です。
longstring.scan(regex) do
…
puts “#{$~.begin(0)}-#{$~.end(0)-1} some other info”
end
「いかにもトリッキー」というほどトリッキーとは思いませんが、
気持ちはわかります。しかし、String#scan と String#gsub の
ブロックパラメータをそろえろ! (#546) という話に関係しなく
もなく、話が進みにくいタイプの提案だと思いました。
機会を見つけてまつもとさんに直談判することをお勧めします。
いずれにせよ、ユースケースを示してください。
ところで、参照実装で
offset = m.end(0)
でなく
offset = m.begin(0)+1
になってるのは意図的でしょうか。
Feature #5606: String#each_match(regexp)
Author: tomoakin (Tomoaki N.)
Status: Feedback
Priority: Low
Assignee:
Category:
Target version:
文字列上の正規表現に一致する場所のoffsetを順に処理できるような
イテレータが欲しかったのですが、
ざっと検索すると1996年
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1206
の昔から話はあり、
全くないという事はなくて、それなりに需要がありそうです。
class String
def each_match(pattern, offset=0)
while(m = self.match(pattern, offset))
offset = m.begin(0)+1
yield m
end
end
end
いかがしょうか?
対称にはRegexp#each_matchもですが、、
Issue #5606 has been updated by mame (Yusuke E.).
Target version set to next minor
Feature #5606: String#each_match(regexp)
Author: tomoakin (Tomoaki N.)
Status: Feedback
Priority: Low
Assignee:
Category:
Target version: next minor
文字列上の正規表現に一致する場所のoffsetを順に処理できるような
イテレータが欲しかったのですが、
ざっと検索すると1996年
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1206
の昔から話はあり、
全くないという事はなくて、それなりに需要がありそうです。
class String
def each_match(pattern, offset=0)
while(m = self.match(pattern, offset))
offset = m.begin(0)+1
yield m
end
end
end
いかがしょうか?
対称にはRegexp#each_matchもですが、、