dポイントプレゼントキャンペーン実施中!

phpにおける正規表現で、パターンにマッチした位置を取得したいのですが、引数で検索する位置を指定することはできても容易に取得する方法がみあたらないので困っています。

マッチした文字列を strstr() を使って位置取得するという方法しか思い浮かばないのですが、どうにかならないでしょうか。

A 回答 (1件)

#ほとんどそのままだけど、要点はPREG_OFFSET_CAPTUREフラグを指定するということ、すると配列でマッチした文字列と位置(0始まり)が得られる


$text = "abcdefg";
$pattern = '/d.+f/';
if(preg_match($pattern, $text, $matches, PREG_OFFSET_CAPTURE) ){
print "マッチした部分:".$matches[0][0]."\n";
print "マッチした位置:".$matches[0][1]."\n";
}

参考URL:http://jp.php.net/manual/ja/function.preg-match. …
    • good
    • 0
この回答へのお礼

ありがとうございます。
実を言うと PREG_OFFSET_CAPTURE というフラグがあるのは質問直後にみつけたのですが、使い方がわからず困ってました。

ドキュメントより、

>このフラグが設定された場合、マッチする度に付随する文字列のオフ セットも返されます。これにより、返り値は配列となり、・・・

とあったので、関数の戻り値が配列なのだと解釈したのですが、いくらやってもスカラーしか返らず…。引数の方($matches[])だったのですね、おかげ様で無事思っていたことが実現できました。

お礼日時:2006/03/26 13:27

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