• ベストアンサー
  • すぐに回答を!

正規表現でOR

正規表現について困っています。 $text = '&a=000&b=111&c=222'; mb_ereg('&b=(.*?)&', $text, $result); 上記のように、スタートを&b=とし、エンドを&とすれば、'b=111' の中の '111'  は抽出できます。 ところが、$textには次のようなパターンもあります。 $text = '&a=000&b=111'; この場合、エンドを示す文字が文末のために存在しませんので、 mb_ereg('&b=(.*)', $text, $result); とやれば抽出できます。 やりたいことは、上記の2つのパターンに対応する正規表現を1行で記述したいのです。ORを表す表現を調べていろいろ試したのですが、うまくいきません。 よろしくご指導のほどお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数29
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1

mb_ereg('&b=([^&]+)', $text, $result); でどうですか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

この表記は、&以外の文字がある限り拾ってくれるということですね。 これで、次の&がくるまで、もしくは末尾まで拾うことができました。 ありがとうございました。

関連するQ&A

  • 正規表現での置換えについて

    正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

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

    変数の文字列を範囲指定して削除しようとしています。 正規表現を使って範囲指定したいのですが、うまくいきません。 <span class="shimei"> ~ </span> というのは正規表現でどのように書くのでしょうか? $name = mb_ereg_replace("<span class=\"shimei\">.*</span>","",$name); これはどこが間違っているのでしょうか?

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

    // URLエンコード $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str =~ tr/ /+/; これをPHPの関数を使った方法と使わなかった方法が知りたいです。 また、正規表現で、ereg.., preg.., mb_eregがありますが、この違いの詳細が知りたいです。

    • ベストアンサー
    • PHP
  • 正規表現でURLを抽出するには。

    正規表現でURLを抽出するには。 HTML内リンク先などのURLを正規表現で抽出したいのですが。 HTML内で表記されているURLはhttpやhttps以外にも相対URLなど様々な書き方が できるようですが、それらを抽出する正規表現パターンはどの様に書けばよいのでしょうか?

    • ベストアンサー
    • Perl
  • 記号[]が混ざった正規表現について

    いつも、お世話になります。 文字列:<textarea name="[top]">abcde</textarea> から、abcde のみを抽出したくて <?php $a = "<textarea name=\"[top]\">abcde</textarea>"; mb_ereg("<textarea name=\"[top]\">(.*)</textarea>",$a,$b); print "$b[1]"; ?> としましたが、抽出されません。 "[" の表現に関係があると思います。 正規表現について教えてください。

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

    phpの初心者です。 あるサンプルのプログラムを読んで勉強していたのですが、正規表現の使い方がよく解らず本やサイトで調べましたが、それでも解らなく。 下記の場合ですと同様な結果になるのでしょうか? ereg("(.*)#(.+)",$aa,$bb) また、正規表現に詳しいサイトがあればご紹介頂けますか? 本当に申し訳ありません。

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

    正規表現に疎いので質問させてください。 $param = ereg_replace('/?$', '', $_SERVER['REQUEST_URI']); これをpreg_matchで書くとどうなりますか? よろしくお願い致します。

    • 締切済み
    • PHP
  • 今日の<h1>(.*)</h1>です。正規表現で質問があります。

    mb_ereg("今日の<h1>(.*)</h1>です。",$a,$b) で、<h1>~</h1>の間の文字をすべて抜き取りたいのですが、 抜き取ってくれません。 抜き取り先のHTMLはUTF-8で記述されていたので、 mb_internal_encodingでUTF-8に phpにファイルもすべて、UTF-8で記述したのですが、 どうしても抜き取ってくれません。 正規表現に間違いがあるのでしょうか? 何かアドバイスいただけませんでしょうか?

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

    正規表現で 数値と半角記号(!#$%()~|-^@[;],./`{+*}_)が入っているというものを表現したいのですが、、、 下記のような正規表現をすると、エラーになってしまいます。何かよい方法はありませんか? ^[a-zA-Z0-9\-_!#$%()~|-^@[;],./`{+*}_]*$ 又、携帯電話のチェックをしたいのですが、 1文字以上の文字列があってというような処理にしたいのですが、何かよい方法はないでしょうか? ereg( "@docomo\.ne\.jp$", $email )

    • ベストアンサー
    • PHP