• 締切済み

Perl パターンマッチについて

$dm = a1234 $dm =~ tr/[a-zA-Z]//d; $dm は 「1234」になりますが、 $dm =~ tr/[^0-9]//d; これだと 「a」 になってしまうのは何故でしょうか?

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

trでの[^0-9]は「0~9以外」の意味では無いから。 [という文字、^という文字、0から9までの文字、]という文字が変換対象です こういう正規表現の文字セットはtrではそうは動かない、とperldocのperlopのtrのところにちゃんと書いてあります。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

tr の仕様.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Perl 変換について

    $dm1の値は変化させずに$dm2に変換後の数値を入れるにはどのようにしたら良いでしょうか? $dm1 = a1234 $dm2 = $dm1 =~ tr/[a-zA-Z]//d;  ※これだとうまくいかない。 結果以下のようにしたい。 $dm1 = a1234 $dm2 = 1234

  • perlでurlが正しいか判定したい

    perlでホームページのURLが正しいか判定したいのですが、ネットで調べていても出てくるのがメールアドレスの判定方法ばかりで、ホームページに関してのことがなかなか見つかりません。 if($url !~ /^https?:\/\/[\w\.-~\?&=\/]{4,}/) { } こんな感じで適当にやっていたのですが、なぜか ,(カンマ) のチェックをスルーしてしまったりと思うように制御できておらず、 http://www.din.or.jp/~ohzaki/perl.htm#httpURL このページを読んでもちんぷんかんぷんで、とりあえず if($url !~ /\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f ][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.) *[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\. [0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f] [0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A- Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f ])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*) *)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f]) *)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])* )?/){ } こんな感じで代入してみても予想どおり構文エラーとなってしまい、どうやればいいのか困っています。(あまりの長さに理解できていないためエスケープも一切させてないので、エラーが出て当然といえば当然ですが) そこまで厳密にでなくてもかまわないのですが、ホームページのURLに間違いがないかチェックする方法はないでしょうか。 (特に . と , や : と ; や ~ と ^ の入力間違い、スペースが入っていないかとか全角入力になっていないかなどをチェックしたいです)

    • ベストアンサー
    • Perl
  • jcode.plのかわり

    jcode.plの jcode::tr() のかわりを探しています。 jcode.plの jcode::tr(\$val,'0-9A-Za-z ()_@-','0-9A-Za-z ()_@-'); をPerl5.18.2で使用するとエラーが出てしまいます。これを回避したい。 プログラムがUTF-8であれば $val =~ tr/0-9A-Za-z ()_@-/0-9A-Za-z ()_@-/; のようにすれば実現可能みたいですが、プログラムはEUCで書かれています。 影響範囲からプログラムの文字コードをかえることはできれば避けたい。 一文字ずつ変換することも考えましたが、この方法ではパフォーマンスに懸念があります。 jacode.plなるものもありますが、これに置き換えるだけでは文字化けしてしまいました。 jcode::tr()のかわりになるような手段はあるのでしょうか?

    • ベストアンサー
    • Perl
  • .htaccess の RewriteRule で、引数が10個以上あ

    .htaccess の RewriteRule で、引数が10個以上ある場合の書式について .htaccess に、下記のように記述をしています。 長ったらしいですが、要するに引数を16個渡したいのです。 RewriteRule ^example_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+).html$ example.php?VAR01=$1&VAR02=$2&VAR03=$3&VAR04=$4&VAR05=$5&VAR06=$6&VAR07=$7&VAR08=$8&VAR09=$9&VAR10=$10&VAR11=$11&VAR12=$12&VAR13=$13&VAR14=$14&VAR15=$15&VAR16=$16 ですが、こう書くと、例えば「VAR16=$16」の「$16」は「$1 と "6"(文字列としての6) を連結したもの」と解釈されてしまうらしく、うまく表現できません。 10個以上の引数を渡したい場合、どう記述すれば良いでしょうか。

    • ベストアンサー
    • PHP
  • mod_rewriteでの'?'表示

    http://www.example.com/search.cgi?a=mypage&b=go&c=1&d=2 を、 http://www.example.com/mypage/go/search?c=1&d=2 に変えたいですが、どのようにすればよいのでしょうか? htaccessでは・・・ Options +FollowSymlinks RewriteEngine on RewriteRule ^/([0-9A-Za-z]+)\/([0-9A-Za-z]+)\/search?c=([0-9A-Za-z]+)&d=([0-9A-Za-z]+)$ /search.cgi?a=$1&b=$2&c=$3&d=$4 [L] にしてもアクセスできません… APACHEマニュアルでは「?」は文字数指定と言う文法に なるらしく、「?」を表示させたいです。 http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule どうすればよろしいでしょうか?ご教示ください。

  • VBScriptでの正規表現パターンマッチ

    ASPプログラムの中で 文字列のパターンマッチを正規表現で行ないたいと考えています。 英字と数字両方を組み合わせた文字列(英字と記号且つ数字)であることをチェックしたいのですが 以下のようなロジックでは、英字、数字どちらかだけの文字列もマッチしてしまうのではと思います。 ほかによい書き方はありますでしょうか? Dim strTEST TESTCHECK = 0 Dim objRE Set objRE = new RegExp objRE.pattern = "[_\-a-zA-Z0-9]" If (objRE.Test(strTEST) = True) Then Else TESTCHECK = 1 End If Set objRE = Nothing よろしくお願いいたします。

  • Perlにおけるパターンマッチ

    パターンマッチの勉強をしていたところ 偶然「ちょう」という言葉を以下のように書くとひっかからないことに気づきました。 なぜ「ちょう」という日本語だとひっかからないのでしょうか? また「ちょう」がパターンマッチにひっかかるようにするのにはどうすべきなのでしょうか? if($word =~ /ちょう/){ { &error("エラー","「ちょう」という言葉は使用できません"); }

    • ベストアンサー
    • Perl
  • 正規表現の書き方について質問します。

    /[-_\.a-zA-Z0-9]+\@[-_\.a-zA-Z0-9]{3,}\.[a-zA-Z]{2,3}$/ 上記の最後の $ の使い方はあっているのでしょうか? プログラム自体は期待通りの動きをします。 宜しくお願いします。

  • 全角英数字を半角英数字に変換したい

    全角英数字を半角英数字に変換する方法を教えて下さい。 $data =~ tr/0-9a-zA-Z/0-9a-zA-Z/; 以上のようにした場合、J-perl意外では望みどおりに変換されません。 jcode.plをつかって 全角英数字を半角英数字に変換する方法があると、 書かれていた方がいましたので、 できればjcode.plをつかった場合の 具体的なスクリプトの書き方を教えて下さい。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlでランダムな文字列を作りたい

    perlでランダムな文字列を作成する簡単な方法はありませんか? 文字数と文字種を指定できるとありがたいのですが。 $foo = hoge(8,'a-zA-Z0-9'); みたいな感じでできるといいのですが。 お願いします。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • V50s-07IMBデスクトップPCを使用している方に質問です。タスクトレイに位置情報を取得中のアイコンが常時点灯していることがありますが、そのアイコンはLenovo.Modern.ImController.PluginHostに接続しているようです。では、Lenovo.Modern.ImController.PluginHostとは一体何なのでしょうか?
  • Lenovo.Modern.ImController.PluginHostは、LenovoデスクトップPCに搭載されているソフトウェアです。このソフトウェアは、位置情報の取得と管理を担当しています。そのため、位置情報を常時取得中のアイコンが表示されることがあります。
  • 位置情報を常時取得中の場合、プライバシーの問題やバッテリーの消耗が心配されることがあります。しかし、Lenovo.Modern.ImController.PluginHostは、セキュリティとバッテリーの管理に配慮して設計されていますので、特に問題はありません。安心してご使用ください。
回答を見る