• ベストアンサー

指定した文字まで文字列を取り出したい

PHP初心者です。 [user]よしだ[\user] [user]ながはま[\user] [user]abcdefg46[\user] 上記のように 特定の 開始[user] 終了[\user] を定義して名前だけ抜き出すにはどうすればよいのでしょうか? 日本語及び英数字など含みます。 ご教授いただけますと幸いですよろしくお願いいたします。

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

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.1

preg_match_all()を使用して正規表現で抜き出せます。 <?php $str=<<<END [user]よしだ[\user] [user]ながはま[\user] [user]abcdefg46[\user] END; $pattern='/\[user\](.*?)\[\\\user\]/'; preg_match_all($pattern,$str,$match); var_dump($match); ?> 検索パターンに()を使用すると該当検索文字列とは別にpreg_match_allの 3つ目のパラメータの$matchに取得されます。 今回の場合は該当検索文字列が$match[0]にマッチした順に配列でセットされ (.*?)の部分が$match[1]に同じようにセットされます。 ※質問とは外れますが、バックスラッシュ(yenマーク)はデータには 使用しないほうがいいかと思います。 phpではエスケープシーケンスに使われる記号なので想像と違う動きになることがあります。 今回の場合ですと検索パターンを定義するときに[\user]の中でエスケープする必要があるのは [,\,]なのですが、\に関しては1個エスケープ文字をつけてもpreg_match_allではうまくいきません。 2個or3個ですとうまくいきます。このあたりの動きは私はよくわかってません…。 もしデータ定義を変更できるならバックスラッシュでなくスラッシュにでもしたほうが 面倒がなくなるかと思います。 スラッシュもpreg_match_allの検索パターンではエスケープする必要がありますが 別のものと同じくエスケープ文字は1個でいいです。

makomako46
質問者

お礼

早速のお返事に感謝いたします! ありがとうございました おかげさまでクリアーできました ちなみにyenマークは、この板の仕様のようでしてスラッシュを打ってたのですがyenマークに変換されてしまった模様です。 いやいや しかし助かりました 感謝感謝でございます。 ありがとうございました!!!

関連するQ&A

専門家に質問してみよう