history

青木日記 RSS

<前の日 | この月 | 次の日>

2004-03-24

正規表現の名前付きキャプチャ

with-regex は Ruby 的にはブロックでしょうね。

/xxx(?<var>.....)xxx/.if_match(str) {
  p var
}

こっちのほうが binding よりはマシっぽい。

でも else が書けないのは嫌だな。かなり無理矢理だが、 マッチしなかったらメソッドが nil を返すってことにして……

/xxx(?<var>.....)xxx/.if_match(str) {
  p var
} or return nil

うわ、読みづらっ! これはだめだー。

正規表現の名前付きキャプチャ (2)

http://cvs.m17n.org/~akr/diary/d2004_03.html#a2004_03_24_1

名前付き括弧の利点は、括弧の順番が変わっても大丈夫というところだと思います。 そういう利点があるんだから、多少コードが長くなってもいいんじゃないでしょうか。 メソッドを呼ぶと知らないうちにローカル変数に代入されてるってのは やっぱり想像しにくいですよう。

(02:46)

本日のツッコミ(全2件) [ツッコミを入れる]
kjana (2004-03-25 10:41)

/(?<s1>foo).*(?<s2>bar).*/.match(string) {|m| p m[:s1]} とか.
MatchData#[] が Symbol を受け付けるようにするだけ.微妙....

    if m = regexp.match(string)
      puts m[:foo]
    else
      puts "nothing matched."
    end

ってな書き方はできる.Regexp の埋め込み? 気にしちゃいけない :-P

akr (2004-03-25 12:11)

$~[] に名前を使うことに関しては、[ruby-dev:19785] で、まつもとさんが、
「1.9がはじまったら私の方でやります。ちょっと待っててね。」と述べています。

したがって、(ちょっとというのがいつのことかはともかくとして)それはそうなるはずです。

ただ、それだけだと $1 より短くはならないと思うんですよね。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS