• 締切済み

perlでの正規表現?文字コードの問題?

なぜ、全角Bがマッチするのでしょか? $sh ="B111\"; print "$sh\n\"; if($sh=~ /\A[あ,い,う,え,お,か,き,く,け,こ,さ,し,す,せ,そ,た,ち,つ,て,と,な,に,ぬ,ね,の,は,ひ,ふ,へ,ほ,ま,み,む,め,も,や,ゆ,よ,わ,ゐ,ゑ,を,ん,ぁ,ぃ,ぅ,ぇ,ぉ,ゃ,ゅ,ょ,が,ぎ,ぐ,げ,ご,ざ,じ,ず,ぜ,ぞ,だ,ぢ,づ,で,ど,ば,び,ぶ,べ,ぼ,ぱ,ぴ,ぷ,ぺ,ぽ]/){ print "ヒット\n\"; } print "処理終了\n\";

  • Perl
  • 回答数1
  • ありがとう数0

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

身も蓋もない書き方をすればスクリプトが間違っているからです。 無用なカンマを別にして、なんの指定も前処理もなしにそのように 書いて期待通りにマッチするのは大昔のjperlくらいです。 Encode::decode を使うなどして、マルチバイト文字が バイトの並びでなく文字として認識されるようにしてください。

関連するQ&A

  • Jcodeのtrが遅いので代替のプログラムを作りたい

    検索用のプログラムをつくってるのですが 検索のために全角⇒半角変換(ANK文字のみ)、ひらがな⇒カタカナ変換をしているのですが とても遅くて困ってます。 本当はCでモジュールを作りたい気がするほどのものなのですが 汎用性を考慮して、何もモジュールを使わない、または Encode モジュールだけで インデックスを作成しないという前提で高速化を実現する方法はあるでしょうか? 参考までに 合計500kバイトの114の文書ファイルを検索するのに Athlon64 3200+ (メモリ4G) で約1.5秒かかります。 本番環境には、約100M以上の5000ファイルがあるので心配です。 use Jcode; sub test { my($parm)=@_; my $zen='!”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_‘abcdefghijklmnopqrstuvwxyz{|}'; my $han='!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}'; my $zentrs="あいうえおかきくけこがぎぐげごさしすせそざじずぜろたちつてとだぢづでどなにぬねのはひふへほばびぶべぼぱぴぷぺぽまみむめもやゆよゃゅょャュョっッらりるれろわをん"; my $zentre="アイウエオカキクケコガギグゲゴサシスセソザジズゼロタチツテトダヂヅデドナニヌネノハヒフヘホバビブベボパピプペポマミムメモヤユヨヤユヨヤユヨツツラリルレロワヲン"; return Jcode->new($parm)->tr($zen,$han)->tr($zentrs,$zentre); } 参考までに、Jcode.pm v1.99(β)では、tr/(from)/(to)/ で実現されているようですが これをパクってもうまくいきませんでした。

  • エクセルにかなとローマ字のテーブルを作りましたが、

    エクセルにかなとローマ字のテーブルを作りましたが、「ミュ 」に該当する「myu」をセルに打ち込むと、「my」としか表示されません。これは、表示されないことが正しいのでしょうか。 VBAのプログラミングでかな・ローマ字の変換のためのテーブルを作っています。何とかなりませんか。 (テーブル・途中まで) ア あ a イ い i ウ う u エ え e オ お o カ か ka キ き ki ク く ku ケ け ke コ こ ko サ さ sa シ し shi ス す su セ せ se ソ そ so タ た ta チ ち chi ツ つ tsu テ て te ト と to ナ な na ニ に ni ヌ ぬ nu ネ ね ne ノ の no ハ は ha ヒ ひ hi フ ふ fu ヘ へ he ホ ほ ho マ ま ma ミ み mi ム む mu メ め me モ も mo ヤ や ya ユ ゆ yu ヨ よ yo ラ ら ra リ り ri ル る ru レ れ re ロ ろ ro ワ わ wa ン ん n ガ が ga ギ ぎ gi グ ぐ gu ゲ げ ge ゴ ご go ザ ざ za ジ じ ji ズ ず zu ゼ ぜ ze ゾ ぞ zo ダ だ da ヂ ぢ ji ヅ づ zu デ で de ド ど do バ ば ba ビ び bi ブ ぶ bu ベ べ be ボ ぼ bo パ ぱ pa ピ ぴ pi プ ぷ pu ペ ぺ pe ポ ぽ po キャ きゃ kya キュ きゅ kyu キョ きょ kyo シャ しゃ sha シュ しゅ shu ショ しょ sho チャ ちゃ cha チュ ちゅ chu チョ ちょ cho ニャ にゃ nya ニュ にゅ nyu ニョ にょ nyo ヒャ ひゃ hya ヒュ ひゅ hyu ヒョ ひょ hyo ミャ みゃ mya ミュ みゅ my ミョ みょ myo よろしくお願いします。

  • Warning: mb_strpos(): Unknown encoding or conversion error について

    フォームから入力した文字を $myvalue["kana_mei"] = mb_convert_encoding($_POST["kana_mei"], "SJIS"); でSJISに変換し、 $sStr = $val["kana_mei"]; $sAllowedChars ="あいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつってとだぢづでどはひふへほばびぶべぼぱぴぷぺぽまみむめもなにぬねのらりるれろやゆよゃゅょわをんー "; ($sAllowedChars, "SJIS"); If(mb_strlen($sStr) > 0 ) { for ($i=0;$i<mb_strlen($sStr);$i++) { $sStr1= mb_substr($sStr,$i,1); if(!is_integer(mb_strpos($sAllowedChars,$sStr1))) { $err_msg["kana_mei"] = "※ひらがなでご記入ください。"; } } } でひらがなチェックを行っています。 IE6.0 IE7.0 では、問題ないのですが、MAC IE5.0 Fireworksでは、 mb_substr()で”Warning: mb_strpos(): Unknown encoding or conversion error”となってしまいます。 PHPのバージョンは、4.4.2です。 何方か、対処方法、教えて下さい。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ロシア語のアルファベットみたいなの

    аあ иい уう эえ оお каか киき иуく кэけ коこ гаが гиぎ гуぐ гэげ гоご саさ сиし суす сэせ соそ дзаざ дзиじ дзуず дзэぜ дзоぞ таた тиち цуつ тэて тоと даだ дзиぢ дзуづ дэで доど наな ниに нуぬ нэね ноの хаは хиひ фуふ хэへ хоほ баば биび буぶ бэべ боぼ паぱ пиぴ пуぷ пэぺ поぽ маま миみ муむ мэめ моも яや юゆ ёorйоよ раら риり руる рэれ роろ ваわ воを нorмん кяきゃ кюきゅ кёきょ няにゃ нюにゅ нёにょ тяちゃ тюちゅ тёちょ гяぎゃ гюぎゅ гёぎょ хяひゃ хюひゅ хёひょ дзяぢゃ дзюぢょ сяしゃ сюしゅ сёしょ бяびゃ бюびゅ бёびょ мяみゃ мюみゅ мёみょ дзяじゃ дзюじゅ дзёじょ пяぴゃ пюぴゅ пёぴょ ряりゃ рюりゅ рёりょ あってますか? уって跳ねてなきゃダメなんかな? 跳ねてるやつないから

  • Perlの正規表現

    Perlの正規表現 Perlの正規表現で質問です。 MT4.13を使用して携帯用サイトを構築しています。 今現在、携帯用記事中の画像を縮小して表示しようと「regex_replace」を 使って、記事中のimgタグからsrc部分を抜き出して外部のphpに飛ばしています。 <$MTEntryBody regex_replace="/<img (.*?)src=\"(.*?\.jpg)\"(.*?)>/ig","<img src="phpスクリプト?img=\\2" border="0" />"$> 記事中のjpg(JPG)画像のsrc部分を拾って、phpに渡し、GDで縮小した画像を表示すると言った感じです。 しかし、regex_replaceの正規表現部分が上手く機能していないのか、jpg画像の最後の一枚のみ変換されると言った具合です。 JPG画像も含めて、記事中全てのjpg(JPG)画像を縮小して表示したいのですが、正規表現が思い浮かばず質問しました。 上記以外にも /<img (.*?)src=\"(.*)?(\.jpg|\.JPG)\"(.*?)>/ig などとしましたが上手くいきませんでした。 ちなみに、phpで画像を縮小する部分は問題なく動作しています。 以上、宜しくお願い致します。

  • Perl正規表現わかりますか?

    下記のPerl正規表現ですが、どんな意味か分かるでしょうか? $var =~ s!/([^/]+|~(\.\.))/\.\./!/!g 参考書も読んでみたのですが分かりませんでした(セットされている文字列にどんなマッチング、置換をしているのでしょう) お分かりの方いれば、よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlの正規表現について

    以下は、OTRSというパッケージのソースコードに含まれる正規表現(置換)ですが、 どのような解釈がなされるのでしょうか? s{_<!--_[]_dtl:place_block:_$SubLayer_[_]_-->_}{$SubLayerString}xms; (アンダー・スコアは、実際にはスペースです) [ ]を文字集合だとすると、括弧の中にはスペースしか含まれていないので、 わざわざ括弧で括る必要がないように思えます。

    • ベストアンサー
    • Perl
  • Perl 正規表現に関して

    現在Perlにて正規表現を用い,アクセス者のログが納めてあるlog.datからデータを検索し集計するといったアルゴリズムです. ところが正規表現を用いたのは良いものの,アルファベット以外をパターンとして使用したとき,データを呼び出すどころか表示されない状況に陥ってしまいました. elsif($referer =~ /abcd/i) { $word2 = "abcd"; } 上記のコードは,パターンがアルファベットで構成されているため,正常にシステムが動作します. elsif($referer =~ /あいうえ/i) { $word2 = "あいうえ"; } しかし,上記のコードはパターンが平仮名で構成されているため,冒頭で記している問題が発生してしまいます. そこで (1)パターンにアルファベット以外のものは使えるのか. (2)パターンにアルファベット以外のものを使いたいときはどうすればいいのか. についてお教えください. また正規表現のほかに,文字列を検索し,頻度をカウントすることに長けているコードがございましたらお教え願います. 以上の内容で不明な点等ございましたら随時対応致します. 宜しくお願いします.

    • ベストアンサー
    • Perl
  • perlでの正規表現

    perl での正規表現がうまくいかないので質問させてください。 以下のような文章から「や」や「、」で連続に繋がった単語(カボチャ、人参、白菜、野菜)を抽出したいのですが これ|から|は|カボチャ|や|人参|、|白菜|など|の|野菜|が|旬|を|迎え|る|。 これ|から|は|カボチャ|、|人参|や|白菜|など|の|野菜|が|旬|を|迎え|る|。 自分なりに考えた以下のマッチではうまく行きませんでした。 m/(.*)\|[や、]\|(.+?)\|[や、]\|(.+?)\|など\|の\|(.+?)\|/; print "$2 $3 $4 $5\n"; 解決方法がありましたら、ご教示いただけますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlでの正規表現について

    文字列のなかの"<タグ>(アルファベット1文字)"すべてに対して置換処理をさせたいのですがうまく動作しません。 現在はこう記述しております。 $str=~ s/(~<(.*?)>\w)/置換文字列/g; 良い方法があれば教えていただけると助かります。

専門家に質問してみよう