[ruby-list:50344] uuage of `?<='
From:
KIRIYAMA Kazuhiko <kiri@...>
Date:
2016-07-06 22:11:05 UTC
List:
ruby-list #50344
しばらく Ruby を使ってなくて,ちょっと解決できない問題があり
ました.肯定的先読み演算子 `?<=' の使い方です.
kiri@kazu:~[1007]% ruby --version
ruby 1.9.3p484 (2013-11-22 revision 43786) [amd64-freebsd9]
kiri@kazu:~[1008]% irb
irb(main):001:0> a = '@foo
irb(main):002:0' This is 1st foo line 1
irb(main):003:0' This is 1st foo line 2
irb(main):004:0' This is 1st foo line 3
irb(main):005:0' @foo
irb(main):006:0' This is 2nd foo line 1
irb(main):007:0' @foo
irb(main):008:0' This is 3rd foo line 1
irb(main):009:0' This is 3rd foo line 2
irb(main):010:0' '
=> "@foo\nThis is 1st foo line 1\nThis is 1st foo line 2\nThis is 1st foo line 3\n@foo\nThis is 2nd foo line 1\n@foo\nThis is 3rd foo line 1\nThis is 3rd foo line 2\n"
irb(main):011:0> a.scan(/(@foo(?:.|\n)*?)(?<=(@foo|\z))/).each do |content|
irb(main):012:1* p content
irb(main):013:1> end
SyntaxError: (irb):11: invalid pattern in look-behind: /(@foo(?:.|\n)*?)(?<=(@foo|\z))/
from /usr/local/bin/irb:12:in `<main>'
irb(main):014:0> a.scan(/(@foo(?:.|\n)*?)(?<=@foo|\z)/).each do |content|
irb(main):015:1* p content
irb(main):016:1> end
SyntaxError: (irb):14: invalid pattern in look-behind: /(@foo(?:.|\n)*?)(?<=@foo|\z)/
from /usr/local/bin/irb:12:in `<main>'
irb(main):017:0> a.scan(/(@foo(?:.|\n)*?)(?<=@foo)/).each do |content|
irb(main):018:1* p content
irb(main):019:1> end
["@foo"]
["@foo"]
["@foo"]
=> [["@foo"], ["@foo"], ["@foo"]]
irb(main):020:0>
となって,どうもうまく機能しないのですが,a の @foo から次の
@foo までの文字列を順番に取り出すにはどうすれば良いですか?
---
KIRIYAMA Kazuhiko