[#50363] [質問] Ruby socket.send でUDP Packet が出ない? ネットワーク環境によるものか? — <yamataka@...08.itscom.net>

山口と申します。

9 messages 2016/07/27

[ruby-list:50349] Re: usage of `?<='

From: KIRIYAMA Kazuhiko <kiri@...>
Date: 2016-07-07 06:02:41 UTC
List: ruby-list #50349
At Thu, 7 Jul 2016 10:33:07 +0900,
Shugo Maeda wrote:
> 
> 前田です。
> 
> 2016-07-07 7:18 GMT+09:00 KIRIYAMA Kazuhiko <kiri@kx.openedu.org>:
> >> しばらく Ruby を使ってなくて,ちょっと解決できない問題があり
> >> ました.肯定的先読み演算子 `?<=' の使い方です.
> >
> > ↑は「肯定的先読み」→「肯定的後読み」の間違いです.
> 
> この場合、必要なのは先読み(?=〜)なんじゃないでしょうか。
> 
> a = '@foo
> This is 1st foo line 1
> This is 1st foo line 2
> This is 1st foo line 3
> @foo
> This is 2nd foo line 1
> @foo
> This is 3rd foo line 1
> This is 3rd foo line 2
> '
> a.scan(/@foo.*?(?:(?=@foo)|\z)/m) { |s|
>   p s
> }

御指摘の通りでした(↓).

irb(main):066:0> a.scan(/(@foo\s.*?)(?=(?:@foo\s|\z))/m).each do |content|
irb(main):067:1* p content
irb(main):068:1> end
["@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"]
=> [["@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):069:0> 

私も昔使っていた記憶があって,確か先読みの方だったよなぁと思っ
ていたのですが,[1] に

「ある位置から続く文字列(先読み、lookahead)/ある位置の手前までの文字列(後読み、
lookbehind)」と「マッチする(肯定、positive)/マッチしない(否定、negative)」の組み合
わせで4つのパターンがあります。

とあったので,後読みの方を選択しました.しかし,↑を見れば誰
でも「後読み」を選択しません?

[1] http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fregexp.html

P.S.
  正規表現に m オプションがあるのを始めて知りました.確か
1.8* の頃には無かったような....

# 俺も古いなぁ ;-)

---
KIRIYAMA Kazuhiko

In This Thread