- ベストアンサー
正規表現の質問です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
マッチします。
その他の回答 (4)
- tatsu99
- ベストアンサー率52% (391/751)
>実行環境がなく困っています・・ たぶん、この質問自体も、インターネット喫茶等から、行っていることとご推測致します。お困りのあなたに成り代わって、私のテスト環境で試験させていただきました。以下のようになりました。 "match"が表示されました。 ですのでマッチします。 perl virsion v5.8.5 CentOS release 4.4 (Final) で確認させていただきました。
- pick52
- ベストアンサー率35% (166/466)
回答は他の方たちがいっているとおりなので省略しますが、実行環境が ないなら普通にインストールして試してみればいいだけなのでは。 Perlは無料なんだし。 何か自分のマシンにインストールできない事情でもあるのでしょうか。 いや、単に気になっただけですのでどうしても答えたくないというの ならいいのですけど本当に気になります。
- agharta
- ベストアンサー率52% (54/103)
ちょいと補足しておきます。 完全一致の場合ですが、正規表現を使うよりも比較演算子を使用した方が 早いというような記事を見たことがあります。 $str =~ m/hoge/; より $str eq 'hoge' の方が速いってことですかね
- Suzi
- ベストアンサー率38% (130/334)
マッチしますが、EUC_JPや123EUC_JP等、EUC(euc)を含む全ての文字列にマッチしてしまいます。 EUC_JPと完全一致にするのでしたら、m|^EUC_JP$|i とかになります。
関連するQ&A
- 正規表現について
いつもお世話になっております。 perlの正規表現で分からない事があります。 ご存知の方がいらっしゃれば、アドバイスを頂けますようよろしくお願い致します。 (質問内容) 以下のようなプログラムを実行した場合、matchが出力されてしまいます。 $aには、「、IS」を設定しているので、「真」と扱われないと思うのですが、何故、matchが出力されるのでしょうか? また、「偽」として処理をいしたい場合、 どのようにすればよろしいのでしょうか? #!/usr/bin/perl $a = "、IS"; $b = "AIS"; if ($a =~ $b){ print "match\n"; } else{ print "not match\n"; }
- 締切済み
- Perl
- use encodingによって正規表現の結果が変わる?
お世話になります。 webシステムで、画面入力値のチェックをperlで行っているのですが、 今回、perlのバージョンアップ対応を行っており、ソース修正をしたところ、以下のような現象に悩まされて困っております。 (本当のソースはもっと長いのですが、以下の現象により入力チェックが正常に動作しないという点までは突き止めました。) バージョン perl v5.8.0 os Red Hat Linux release 9 現象 use encodingが指定されていると、正規表現の$が効かないようです。 ソースと実行結果1 #!/usr/bin/perl #use encoding "euc-jp"; if ('apple' =~ /e$/) { print ("match\n"); } else { print ("unmatch\n"); } このときは match と表示されます。 ソースと実行結果2 #!/usr/bin/perl use encoding "euc-jp"; if ('apple' =~ /e$/) { print ("match\n"); } else { print ("unmatch\n"); } このときは、unmatch と表示されます。 対処方法のヒントだけでも頂けると助かります。 (他の質問を検索してみましたが、同様なものを見つけることができませんでした。) もしかして、perlのバグなのでしょうか?
- ベストアンサー
- Perl
- 全角カタカナの正規表現
if (preg_match('/[ァ-ヶー]+/', $value, $match )) { print ("$value"."はカタカナです。"."($match[0])"."<br />") } else { print ("$value"."はカタカナではない。<br />"); } という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。 同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。 是非、そのやり方やヒントをおしえてください。 マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。
- ベストアンサー
- PHP
- 正規表現のコーディングについてお願いします。
こんにちは、よろしくお願いいたします。 正規表現パターンを書く場合に皆さんがどのようにされているか教えてください。 例えば(ちょっとムリヤリ感が強いですが)、'Price \5800-' という文字列の \5800 の部分に preg_match でマッチさせたいとします。 単純に考えると、 /\\\d+/ のようなパターンが思いつくのですが、それを文字列として preg_match に渡す際に、コードはどのように書かれますか? <?php $str = 'Price \5800-'; //とりあえず、'/\\\d+/' と書き、'/\\\\\\d+/' と、\ をそれぞれの \ に書き足す if ( preg_match('/\\\\\\d+/', $str, $match) ) { print_r($match); } ?> 「まず、パターンを書き、全ての \ の前に \ を書き足す。」というのが無難なのかな?と思い、そうしていますが、 そういった考え方で間違っていないでしょうか? どうぞよろしくお願いいたします。
- 締切済み
- PHP
- perl マッチさせる方法について
perlでマッチさせたいのですが、なかなかうまくいきません。。 詳細は $joho='これは、テストです。'; $seach='テスト'; if ($joho =~ m/$seach/) { print 'マッチしました。'; } とやっていますが、どうしてもだめです。 if ($joho =~ m/テスト/) { print 'マッチしました。'; } とすれば、マッチするのですが、何がいけないのでしょうか? 環境はperl5.8、EUC-JPです。 初心者な質問かもしれませんが、よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 正規表現について
お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。
- ベストアンサー
- PHP
- 正規表現のパターンマッチがうまくいきません。
正規表現のパターンマッチがうまくいきません。 入力した文字を含むデータを抽出しようとしているのですが、エラーは出ないものの、ヒットしません。 次の構文をそれぞれを試してみました。 目的は入力された文字$matchを含む$textを@queryに入れることです。 if($text =~ /$match/){ push(@query, $text); } if($text =~ /\$match/){ push(@query, $text); } if($text =~ /.*\$match.*/){ push(@query, $text); } if($text =~ m/.*\$match.*/){ push(@query, $text); } 半角英数で何度か試したのですが、どれでやってもヒットしてくれません。 どこをどのように訂正すればいいでしょうか。 お分かりの方ぜひご指導ください。 ちなみによく入力データを$in{aaa}とか$QUERY{aaa}などとまとめることがあるのですが、これを正規表現にそのまま入れるにはどうしたらいいでしょうか。 {}は量指定子になるのでこのままではエラーになるかなとも思うのですが、\などでエスケープすればいいのでしょうか。 上の$matchも元々は$in{aaa}なのですが、 $match = $in{aaa} として変えています。
- ベストアンサー
- Perl
- 正規表現をエスケープさせる関数はあるのでしょうか?\はつけたくないです。
=head Perlの正規表現で例えば aa+aaという文字列をマッチさせたいのですがわざわざ\をいれずに、正規表現をエスケープするような関数? $k = ○○($k); はあるのでしょうか? =cut #my $k = 'aa+aa'; # だとマッチせず my $k = 'aa\+aa'; # だとマッチします。 my $dat = 'aa-aa+aa-aa'; if($dat =~ /($k)/){ print "見つかりました\n"; } print "OK\n"; exit; __END__
- ベストアンサー
- Perl
お礼
親切丁寧にありがとうございます。 時間がなくあせっていたので助かりました。