From: "5.5" <5.5@...> Date: 2016-07-07T09:00:45+09:00 Subject: [ruby-list:50346] Re: usage of `?<=' 5.5 です。 a.split("@foo") ではだめでしょうか。(これだと先頭に空文字列 を拾っちゃいますが) 意図を誤解してたらすみません。 もう少し詳細な仕様がわかるといいのですが。 On 2016/07/07 7:18, KIRIYAMA Kazuhiko wrote: > すいません.Subject タイポしてました. > > At Thu, 07 Jul 2016 07:11:05 +0900, > 私 wrote: >> >> しばらく 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 `
' >> 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 `
' >> 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 >> > -- 5.5@moji.gr.jp