アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHP初心者です。

[user]よしだ[\user]
[user]ながはま[\user]
[user]abcdefg46[\user]

上記のように
特定の
開始[user]
終了[\user]
を定義して名前だけ抜き出すにはどうすればよいのでしょうか?

日本語及び英数字など含みます。

ご教授いただけますと幸いですよろしくお願いいたします。

A 回答 (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個でいいです。
    • good
    • 0
この回答へのお礼

早速のお返事に感謝いたします!
ありがとうございました おかげさまでクリアーできました

ちなみにyenマークは、この板の仕様のようでしてスラッシュを打ってたのですがyenマークに変換されてしまった模様です。

いやいや しかし助かりました 感謝感謝でございます。
ありがとうございました!!!

お礼日時:2010/12/14 23:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!