From: Kazuhiro NISHIYAMA Date: 2006-03-22T21:06:30+09:00 Subject: [ruby-list:41932] Re: look-behindの使用例 西山和広です。 >>> Tue, 21 Mar 2006 16:01:56 +0900 の刻に >>> sndgk393@ybb.ne.jp("K.Kosako") 氏曰く > Hal Fultonからメールが来て(the 2nd edition of _The Ruby Way_ > のためだと思う)、その中にlook-behindの使用例を教えてくれ > というのがありました。僕は正規表現が苦手で、鬼車のデバッグ > 以外ではあまり正規表現を使いません。 > 正規表現雑技(http://www.din.or.jp/~ohzaki/regex.htm)を > 参考にして、とりあえず以下のような例を作りましたが、 > もっと現実的な良い例があれば教えてください。 いくつか考えたり見つけたりしたのを列挙します。 特定の単語を探すのに /(^|[^A-Z])RFC(?![A-Z])/ としなければいけなかったのを、 /(? "Ruby の最新安定版は 1.8.4 です。" "look-behindを使うにはOnigurumaが必要です。".gsub(/(?<=[\w&&[:ascii:]])(?=[^[:ascii:]])|(?<=[^[:ascii:]])(?=[\w&&[:ascii:]])/, ' ') #=> "look-behind を使うには Oniguruma が必要です。" Rubyの変数のうち、クラス変数にマッチさせずに インスタンス変数にマッチする正規表現です。 '$gvar, @@cvar, @ivar, lvar'.gsub(/(?"} #=> "$gvar, @@cvar, <@ivar>, lvar" http://www.ruby-lang.org/ja/man/?cmd=view;name=%C0%B5%B5%AC%C9%BD%B8%BD#a.bf.f4.bb.fa.a4.f2.203.20.b7.e5.a4.ba.a4.c4.a5.b3.a5.f3.a5.de.a4.c7.b6.e8.c0.da.a4.eb の方法1に例がありました。 "tone of 12345Hz".gsub(/(?<=\d)(?=(?:\d\d\d)+(?!\d))/, ',') http://moriq.tdiary.net/20030203.html#p05 にも使用例がありました。 他には「URLの前に「="」または「=」がなければ自動リンクする」と いうのもlook-behindを使うと可能なようです。 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)