正規表現のパターンマッチでうまくいかない問題

このQ&Aのポイント
  • 正規表現のパターンマッチでうまくいかないエラーが発生しています。
  • 入力した文字を含むデータを抽出するための正規表現のパターンマッチがうまくいかず、ヒットしません。
  • 入力データを正規表現にそのまま入れる際のエスケープ方法についても知りたいです。
回答を見る
  • ベストアンサー

正規表現のパターンマッチがうまくいきません。

正規表現のパターンマッチがうまくいきません。 入力した文字を含むデータを抽出しようとしているのですが、エラーは出ないものの、ヒットしません。 次の構文をそれぞれを試してみました。 目的は入力された文字$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} として変えています。

  • choei
  • お礼率63% (286/451)
  • Perl
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

形は一番上のものです. なぜヒットしないのかについては, $text や $match にどのような文字列が入っているかわからないのでなんとも言えません. 後半の質問は, 実際にやってみればたぶんやってみればわかる. ただしエスケープしちゃだめ.

choei
質問者

お礼

早速の回答ありがとうございました。 教えて頂いたパターンで解決できました。(なぜ先ほどまで動かなかったのか結局不明ですが)

関連するQ&A

  • 「マッチしない」正規表現の書き方

    正規表現について、おたずねします。 文字列 abc,def,ghi のいずれかにマッチする正規表現は (abc|def|ghi) ですよね。 それでは、「abc,def,ghi のいずれにもマッチしない」正規表現は、どう書けばいいのでしょうか? あちこち調べましたが、どうしてもわかりません。 ただし、if $a =~ /(abc|def|ghi)/ などで、=~ を !~ に直す、というのはナシです。あくまでも右辺の式の中で表現したいのですが…

  • 正規表現 誤入力にもマッチ

    単語検索のスクリプトで利用者がミスタイプしたときにもマッチするようにしたいと考えています。 例えば、1文字間違って入力した場合にもマッチするように以下のようなスクリプトを書いたのですが、もっと簡単な記述が(標準以外のモジュールを使わずに)できないでしょうか?ご教示いただけましたら嬉しいです。 以下のスクリプトでしていること・・・ hello を .ello|h.llo|he.lo|hel.o|hell. に変換してマッチ。 use strict; my $data = "hallo"; my $query = "hello"; my $q_len = length $query; my $query1 = $query; my @queries; for (my $i=0;$i<$q_len;$i++){ substr($query1, $i,1,"."); push @queries, $query1; $query1=$query; } my $regex = join ("|", @queries); if ($data=~/$regex/){ print "matched\n"; }else{ print "no match\n"; }

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

    正規表現について勉強中です。 先頭2文字をたとえばYQで入力させたい場合は どうマッチさせればよいのでしょうか? if string.match(/^YQ|[0-9]/) == null { nullの場合の処理 } としていますが、うまくいきません。 正規表現についてはまったくの初心者ですので、 笑わないでくださいね。

  • 正規表現を使って入力チェックを行う

    JavaScriptで正規表現を用いて半角英数入力チェックを行いたいのですが、うまくいきません。 ご協力お願いします。 --【1】------------------------------------------------- if((element2.value.match(/^[^0-9a-zA-Z]$/)){  document.FORM01.in_AAA.value="";  return false; } ------------------------------------------------------- 【1】では、半角、全角に関わらず正常に処理が行われます。 --【2】------------------------------------------------- if(!element2.value.match(/^[^0-9a-zA-Z]$/)){   document.FORM01.in_AAA.value="";   return false; } ------------------------------------------------------- 【2】にすると、半角、全角ともエラーとなってしまいます。 どのようにすれば、実装できるのでしょうか。 皆さん、よろしくお願いします。

  • 正規表現のコーディングについてお願いします。

    こんにちは、よろしくお願いいたします。 正規表現パターンを書く場合に皆さんがどのようにされているか教えてください。 例えば(ちょっとムリヤリ感が強いですが)、'Price \5800-' という文字列の \5800 の部分に preg_match でマッチさせたいとします。 単純に考えると、 /\\\d+/ のようなパターンが思いつくのですが、それを文字列として preg_match に渡す際に、コードはどのように書かれますか? <?php   $str = 'Price \5800-';   //とりあえず、'/\\\d+/' と書き、'/\\\\\\d+/' と、\ をそれぞれの \ に書き足す   if ( preg_match('/\\\\\\d+/', $str, $match) ) {     print_r($match);   } ?> 「まず、パターンを書き、全ての \ の前に \ を書き足す。」というのが無難なのかな?と思い、そうしていますが、 そういった考え方で間違っていないでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • [15]にマッチする正規表現

    [15]にマッチする正規表現 [15] にマッチする正規表現を書きたいのですが、うまくいきません。。。。 簡単だ、と思ったのですが。。。 expr "$DATA1" : .*\[15\].* と書くと、中の数字が15じゃなくてもマッチしてしまいます。 expr "$DATA1" : .*15.* であれば"15"にマッチしますが、対象の文字列の都合上、カッコでも識別する必要があり 困っております。[と]をエスケープする目的で\をつける、と思っているのですが、何か 思い違いをしているのでしょうか。

  • preg_matchでの コンマ について 

    phpでの正規表現で 「もしも変数$wordへ入力した文字列が Japan's という文字列に一致すれば」というスクリプトを作成しましたが、うまくいきません。 if(preg_match("/japan\'s/i",$word,$match)){ この Japan's における カンマの取り扱いを このケースではどうしたらいいかよくわかりません。 \' としてみましたが、うまくいきません。 なにかアドバイスやヒントがありましたら、よろしくお願いします。 ああでもない、こうでもないとやってみましたが、その過程で 唯一 Japan's にヒットしたのは、次のスクリプトでした。 if($word=="japan\'s") ただし、これは正規表現は使っていないわけですよね。 なにか、自分のローカル環境に問題があるのかと思い、レンタルサーバーに同じものをuploadして試して見ましたが、やはり結果は同じで、ヒットしませんでした。別のパソコンでもやってみましたが、結果は同じでした。 整理しますと、 (preg_match("/japan's/i",$word,$match) ではヒットせず、よって コンマの前に\をつけて(preg_match("/japan\'s/i",$word,$match) としましたが、これもヒットしなかったということになります。 1) (')は正規表現の特殊文字でないはずですから、そのまま使えるはずだと思いましたが、なぜかこれが使えない。 2) しかも、その前にエスケープの \ をつけても、そのエスケープ が効かないのはなぜか。 追記: 最近分かったこと。 おもしろいことに、 'j すると、hitする。でも、j' とするとヒットしない。 ということは、コンマ自体には問題ないのだろうと推測しています。でも、文字の後にコンマがつくと、preg_matchにとって特別な意味を持つ文字列に変わるのではないか。

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

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP
  • 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 よろしくお願いいたします。

  • preg_matchの正規表現がうまくいかない

    たとえば、http://gehasoku.com/?p=2のソースコードには ------------------- <rdf:Description rdf:about="http://www.com/aaa.html" trackback:ping="http://www.com" dc:title="タイトル" dc:identifier="http://iii.com/bbb.html" dc:subject="ハードウェア" dc:description="1 名前:名無しさん " dc:creator="soft_net" dc:date="2012-02-21T20:05:01+09:00" /> ------------------- のような形の<rdf:Description~~~/>タグの情報ががいくつかあると思います。これらすべてを文字列として取得したくて、次のようなphpを作成しましたが、うまく動作しません。 原因はどうやらpreg_match_allの正規表現がうまくいっていないからのようですので、 <rdf:Description~~~/>を抜き出すことができる正規表現を教えてください。 自分でもここでチェックしながらやりましたが、 http://www.rider-n.sakura.ne.jp/regexp/regexp.php <rdf:Description~をマッチすることはできても、/>で閉じることができませんでした。 よろしくお願いします。 <?php $url="http://gehasoku.com/?p=2"; $html=file_get_contents($urls); preg_match_all("/<rdf:Description(.*)?\/>/",$html,$match); print_r($match); foreach($match[1] as $value){ echo $value; } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう