Rubyにおける正規表現(一致しない)

Rubyを使って、テキスト処理をやっています。 どうしても、うまく行かないところがあります。 サジェスチョンをお願い...

sakusaker7 さんからの 回答

質問者が選んだベストアンサー

  • 2007/05/06 00:25
  • 回答No.2
  • ベストアンサー
sakusaker7

ベストアンサー率 62% (800/1280)

> if (myFlag1==1) && (myFlag2==1) && (!/abc def/) then
> (!/abc def/=~text)
> かな、と考えましたが、ダメでした。
> (/abc def/!=text)
> でも、だめでした。
> (/NONE/!=text)

!= じゃなくて !~ では?
それと
> パターンとして、NONEと言う文字列が入っている場合には、処理を飛ばしたいのです。

こういうときはいたずらに条件を複雑にするのではなくて、

while text = f.gets do
next if /NONE/ =~ text
if (/.../) then
end
end

のように分けた方がスッキリしてわかりやすくなると思います。
お礼コメント
noname#95859
sakusaker7さん、ありがとうございます。
next if /NONE/ =~ text
これを使って、うまく行きました。

皆様のお陰で、今回、目標とした、PerlをRubyで置き換えるステップは、無事完了しました。ありがとうございました。
投稿日時:2007/05/06 13:55
この回答にこう思った!同じようなことあった!感想や体験を書こう!
この回答にはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
  • Rubyの構文?言語仕様? Ruby

    Rubyの以下コードについて質問です。 #!/ruby/bin/ruby print "content-type: text/html\r\n\r\n"; puts "Hello World!" begin def foo x =0 (0...10).each do |value| print value.to_s +"の時"+ x.to_s + "<br />" end end foo rescue =>e print e.class.to_s+ "<br />" print e.message end 上記コードを実行すると以下のような例外を取得します NoMethodError undefined method `+@' for "\343\201\256\346\231\202":String どうやら上記コードの print value.to_s +"の時" の部分の  +"の時" という箇所が問題のようなのですが 上記箇所を + "の時" のように 文字列連結子の +と "の間に半角スペースを 入れるとうまく実行されます。 いったい原因はなんなのでしょうか? 細かい箇所ですが是非、ご教授ください。...

  • Rubyの正規表現を引数に その他(プログラミング・開発)

    お世話になっています。 Rubyの正規表現を引数にできないものでしょうか? def chkStr(sReg) #正規表現にかける if regexp = sReg      ・・・ end end sReg = ~ /\t(国語|数学)/ chkStr(sReg) みたいなことがしたいのです。 宜しくお願いします。...

  • DBから抜き出した値を表示する方法 PHP

    FORMで入力された値をもとにデータベースから値を拾ってきて それを画面に表示させる、という処理をしたいと思っています。 具体的には、usersという「名前」と「ID」が格納されたテーブルがあり、 名前を入力するとその名前に紐付いたIDを表示させるというものです。 usersテーブルには、 id | name --------- 1 | abc 2 | def 3 | ghi というようなデータが入っています。 下記のように書いているのですが、 IDを拾ってきてくれません。 何を入力しても「あなたのIDはです」 と表示されます。 FORMで入力した値が"abc"なら 「あなたのIDは1です」と表示したいです。 echo $user_name; を実行すると入力した名前が出てくるので データベースから抜き出す処理がうまくいっていないと考えてます。 つたない文章になってしまい、 申し訳ありませんが、 お助けいただければと思います。 よろしくお願いいたします。 ------- <?php if ($_SERVER['REQUEST_METHOD']=="POST") { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); $con = mysql_connect('localhost', '【ユーザー名】', '【パスワード】'); if (!$con) { exit('DBに接続できませんでした。'); } $result = mysql_select_db('【データベース名】', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $db = mysql_query('SELECT * FROM users where name='.$user_name, $con); $db = mysql_fetch_array($db); $message="あなたのIDは".$db['id']."です"; echo $message; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>テスト</title> </head> <body> <form action="<?= $_SERVER['PHP_SCRIPT']; ?>" method="post" accept-charset="UTF-8"> <b>名前:</b><br> <input type="text" name="user_name" value="" /> <br><br> <input type="submit" value="ID確認" />&nbsp;&nbsp;<INPUT type="reset" name="reset" value="リセット"> </form> </body> -------...

  • Rubyにおける、XPathの関数「text()="x"」への変数の使 Ruby

    Rubyにおける、XPathの関数「text()="x"」への変数の使用方法 お世話になります。 RubyにてXPathの関数「text()="x"」"x"の部分に変数を使用したいと思い、コードを作成しています。 text() 関数のところで困っています。 例えば <?xml version="1.0" encoding="UTF-16"?> <NameRoot> <Text> <Name>あああああ</Name> <No>001</No> </Text> <Text> <Name>いいいいい</Name> <No>002</No> </Text> <Text> <Name>ううううう</Name> <No>003</No> </Text> </NameRoot> の内容のファイルを読み込み、その中から該当するNoに相当するNameを取得しようと しています。 で、書いたのが下記のような内容なのですが、gettestクラスのgetNameメソッドにて コメントアウトしてある行であれば、決め打ちでNo="001"の物を取ってこれるのですが、 ここに引数として渡されたローカル変数の、idを使用しようとするとnode変数にNilClass が返ってきて取得できません。 文字列リテラルを色々調べてみたのですが、どうも上手く行かず困っています。 他愛も無い質問かもしれませんが、大変困っています。 どなたか知恵をお貸しくださいますようお願い致します。 class gettest def getName(id) #↓これがきちんと動きません node = REXML::XPath.first(@masterdata, '//NameRoot/Text/No[text()="#{id}")]') #↓こちらは当然ながら動きます # node = REXML::XPath.first(@masterdata, '//NameRoot/Text/No[text()="001"]') path = (node.xpath + "/../Name") @name = @masterdata.elements[path].text() end end class main def edit @mastername = "" @mastername = @master.getName("001") print @mastername end end...

  • 複数行をヒットさせる正規表現 PHP

    ~ 省略 ~ ==abc== ! ああ !: あいうえお ! いい !: いうえおあ ==def== ~ 省略 ~ とあった時、==abc==から==def==の間を全て取得したいのですが、 どうにも改行文字の所で止まってしまい、==abc==までしか 取得する事が出来ません。 ~ 省略 ~部分は全く同じ形式で文字列が大量にありますが、 ==abc==、==def==は1箇所にしか存在しません。 どういう正規表現をすれば上記全ての文字列を取得する事が出来るのでしょうか?...

ページ先頭へ