[ruby-list:50347] Re: usage of `?<='
From:
KIRIYAMA Kazuhiko <kiri@...>
Date:
2016-07-07 00:55:57 UTC
List:
ruby-list #50347
At Thu, 7 Jul 2016 09:00:45 +0900,
5.5 wrote:
>
> 5.5 です。
>
> a.split("@foo") ではだめでしょうか。(これだと先頭に空文字列
> を拾っちゃいますが)
> 意図を誤解してたらすみません。
> もう少し詳細な仕様がわかるといいのですが。
仕様というか,具体的には LaTeX のソースを解析するスクリプト
です.たとえば,
\section{タイトル1}
なんたら....
:
\section{タイトル2}
なんたら....
:
\section{タイトルn}
なんたら....
:
みたいなテキストを section 毎に切り分けることをしたいのです.
LaTeX ですんで改行や空白は意味を持ちますので,厳密に
\section{タイトルn} から \section{タイトルn+1} までの間
(\section{タイトルn+1} を含まない)を切り出したいのです.
> 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 `<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
> >>
> >
>
>
> --
> 5.5@moji.gr.jp
>
---
KIRIYAMA Kazuhiko