PHPの正規表現で特定の数字範囲をマッチさせたい

このQ&Aのポイント
  • PHPの正規表現で、特定の数字範囲をマッチさせる方法について教えてください。
  • 自分の試した正規表現パターンではうまくいかないため、助けが必要です。
  • マッチさせたい範囲は0~99までで、ただし「4~6」と「11~15」以外の数字のみをマッチさせたいです。
回答を見る
  • ベストアンサー

PHPの正規表現「ereg」で特定の数字範囲をマッチさせたい

PHPの正規表現「ereg」で特定の数字範囲をマッチさせたい 宜しくお願い致します。 PHPの正規表現で、0~99までの数字があり、そのうち、「4~6」と「11~15」までの数字以外の場合にマッチさせる正規表現について教えて下さい。 自分なりに作ってみた正規表現パターンは下記の通りです。 ereg("([^4-6]{1})|[^11-15])",$hoge) もしくは ereg("([^4-6]{1})|[^11-15]{2})",$hoge) で試してみましたが、「4~6」はマッチしないのですが、「11~15」の時にもマッチしてしまいます。 どうすればいいのか、どなたか助けて下さいー!

  • nikuq
  • お礼率75% (477/631)
  • PHP
  • 回答数2
  • ありがとう数9

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

  • ベストアンサー
  • Hohenheim
  • ベストアンサー率18% (43/237)
回答No.1

下記のような式になります。 ereg("((^[4-6]$)|(^1[1-5]$))", $hoge)

nikuq
質問者

お礼

ありがとうございます! この式を!ereg~で使ってみたらうまくいきました! 本当にたすかりましたー!!

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

[^ ] というのは、1文字に関して「それ以外の文字」ということです。複数文字のパターンに関して「それ以外」という表現は出来ません。 あと、ereg関数は古いので、preg_match関数を使ってください。 0~3と7~10と16~99にマッチですよね。 [0-3]|[8-9]|10|1[6-9]|[2-9][0-9] これだと、"13" の "3" にもマッチするので、単語境界を示す \b を使って、 preg_match("/\\b([0-3]|[8-9]|10|1[6-9]|[2-9][0-9])\\b/",$hoge) 汎用性を考えると、数字の部分だけを抜き出して、大小比較で判断する方がいいと思います。

nikuq
質問者

お礼

ありがとうございます! ANo.1の方に教えてもらったやり方を、preg_matchで使用してできました! eregと同じやり方でしたが、うまくいきました! 本当にたすかりましたーー! お二方には心から感謝です!!

関連するQ&A

  • PHPの正規表現「preg_match」で漢字を含む場合のマッチパター

    PHPの正規表現「preg_match」で漢字を含む場合のマッチパターンについて 宜しくお願い致します。 preg_matchを使っての正規表現で、「あいうえおかきくけこ3月10日さしすせそ」という文字列から「3月10日」だけを抽出するには、どういうパターンが良いのでしょうか? 下記の様にやってみましたが、だめでした。。。 preg_match("/\d{1,2}[月]\d{1,2}[日]/",$hoge,$match) これではうまくいきません。 どなたかお助けくださいー!

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

    PHPのプログラミングの勉強をしています。 正規表現を使って?の1文字をマッチさせたいのですが http://hogehoge.com/?hoge=hoge などの/?の場合は正規表現でマッチさせないようにしたいのです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHP、正規表現の使い方

    PHPで特定の文字列から特定の文字までを削除したいのですが、 正規表現を使うということはわかりましたが、どのようにしていいかがいまいちわかりません。 http://www.sample.php?a=test&b=ex&c=sample という文字列があったとして、 &b=exを取り除きたい場合はどのようにしたらいいのでしょうか。 mb_ereg_matchを使用しようと思っていますが、 その他の方法があればそちらも教えてください。

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

    はじめまして^^ 現在、PHPでプログラムを作っています。 そして、文字列の置き換えをする機会があり、 正規表現をつかうことになりました!! 置き換えに使う関数は、mb_ereg_replaceです! ある条件にあった部分の文字列を置き換えしたいと思っています。 そして、いろいろとやっていきましたら、あるひとつの壁にぶつかりました。。 例えば、PHPでは、正規表現の部分を [^文字]とやると、『文』と『字』という文字列以外にマッチという意味になるらしいのですが、 『文字』という文字列以外にマッチ、というふうに、表現したい場合は、 どう表現すればよいのですか? [^(文字)]とか、その他いろいろ、 自分なりに、色々ためしたのですが、うんともすんともいいません、、 どなたか、わかる方教えて下さいm(_ _)m

    • ベストアンサー
    • PHP
  • PHPの正規表現eregの使い方

    PHP初心者です。 eregを使った入力チェックをしたいのですが、思うように処理できません。 入力は半角英数字のみを受け付け、その他の入力の場合はエラー処理を行いたいと思ってます。 if (!ereg("^[0-9]+$", $user)) { // 半角英数字以外はエラー処理 } 参考のものがあったのでその通りやってみましたが、全角文字も受け付けてしまい困っています。 記号の意味もよくわかりません。 また、これに加え5文字以上8文字以内という条件も付けたいです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • 正規表現で特定の文字列以外をマッチさせる

    正規表現で『#とアルファベット・数字または_』以外をマッチさせようとしています。(たとえば#hogehogeや#hoge_hoge123) 『』内の条件は、 #\w+ で引っ掛けることができたのですが、『』条件以外でという表現がうまくいきません。 どのようにすればマッチングするでしょうか? #投稿前に確認したのですが、「#\w+」でも前後のアルファベットをひっかけてしまってるようです。こちらの方も添削いただければ幸いです。

  • 正規表現について

    下記期待する結果通りになる正規表現を考えておりますが、 うまくいきません。教えて下さい。 期待する結果 hoge(fuga sumomo) マッチする hoge(foo(sumomo)) アンマッチする sumomoが()で囲われている hoge(bar()sumomo) マッチする 作成した正規表現 hoge\([^(]*sumomo[^)]*\) 実際の結果 hoge(fuga sumomo) マッチ hoge(foo(sumomo)) アンマッチ hoge(bar()sumomo) アンマッチ ←予想と違う

  • 正規表現

    PHPです 2と配列に(1,2,3,202,2002,222222)があります。 2と完璧にマッチさせたいのですが、202や2002 222222はNGです2のみ マッチさせたいのですが.... ereg("[***]",$hoge){ ***には何を入れればよいのか

    • ベストアンサー
    • PHP
  • 正規表現で分からないことがあります。

    正規表現で数字の間に「,」が入る場合と入らない場合があるのですが、どう書けばいいのでしょうか? 例えば、 1 1,2 0,1 122 等様々なパターンがある時、これらをヒットさせるにはどうすればいいのでしょうか? \d+だけだと、コンマのところでバラバラになってしまいます。 一回で全てをマッチさせる方法はありますか? 使用しているのはPHPです、よろしくお願いします。

    • ベストアンサー
    • PHP
  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう