logo       

[ruby-list:42113] [Q]式中の改行と演算子位置 Was: [Q] perl の m//g に相当する処理を ruby で行ない: msg#00144

lang.ruby.japanese

Subject: [ruby-list:42113] [Q]式中の改行と演算子位置 Was: [Q] perl の m//g に相当する処理を ruby で行ないたい

元投稿者の逸見です。


06/04/25 に KIMURA Koichi<kimura.koichi-AMwPzFTG5Oh3+QwDJ9on6Q@xxxxxxxxxxxxxxxx>
さんは書きました:
> 木村です。
>
> On Tue, 25 Apr 2006 12:57:35 +0900
> "ITSUMI ken-ichi" <itsumi.ml-Re5JQEeQqe8AvxtiuMwx3w@xxxxxxxxxxxxxxxx> wrote:
>
> > ruby勉強中の 逸見と申します。
> >
> > perl でいうところの m//g で行なう処理を ruby ではどう書くのかリファレンスマニュアル
> > を精読しても判らなかったので、質問させていただきます。
>
> scanを使えばよろしいかと。
> #Stringクラスにあります。

成程、正規表現のところばかり探していては駄目なのですね。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#!/usr/bin/python2.4
# -*- coding: euc-jp; mode:python -*-
'''
○使い方
$ url2inputs.py url
url を引数として、そのページの入力フォーム関連のタグだけを表示する。
'''
import sys
import urllib
import re

content = urllib.urlopen(sys.argv[1]).read()

pattern=re.compile("<form.*?>"
+ "|</form>"
+ "|<input.*?/>"
+ "|<input.*?>"
+ "|<textarea.*?</textarea>"
+ "|<select.*?</select>"
,re.IGNORECASE|re.DOTALL)
for tag in pattern.finditer(content): print tag.group()
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
おかげさまで、↑の Python に対応する Ruby のプログラムとして、↓のコード
を書けばいいことは判りました。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# -*- coding:euc-japan-unix; mode:ruby -*-

$KCODE="e" # EUC

require 'open-uri'

content = URI.parse(URI.escape(ARGV[0])).read
#print content

pattern = Regexp.compile("<form.*?>" +
"|</form>"+
"|<input.*?/>"+
"|<input.*?>"+
"|<textarea.*?</textarea>"+
"|<select.*?</select>",
Regexp::IGNORECASE |
Regexp::MULTILINE # perlの //s がRubyではこうなる
)

content.scan(pattern){|tag| puts tag}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

が、ここでまた、新たな疑問が...

↑の二つの例では、正規表現を生成する compile メソッドの第一引数の、正
規表現を組み立てる所で、文字列と、+演算子の順序が逆になっていますが、
それはそうしないとエラーになるからです。つまり↓は動かないんです。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
pattern = Regexp.compile("<form.*?>"
+ "|</form>"
+ "|<input.*?/>"
+ "|<input.*?>"
+ "|<textarea.*?</textarea>"
+ "|<select.*?</select>"
,Regexp::IGNORECASE |
Regexp::MULTILINE)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

文法的に、式中で、改行する時には、その前に、二項演算子を置かねばならない
ようになっているんでしょうか?

--
逸見研一(いつみけんいち)
Mixi http://mixi.jp/show_friend.pl?id=113732
Orkut http://www.orkut.com/Profile.aspx?uid=11299027584966195898
Blog http://d.hatena.ne.jp/amt/
Plan http://calendar.yahoo.co.jp/amt_tmp




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise