web-dev-qa-db-ja.com

文字列内の正規表現一致の位置を取得する方法は?

Preg_matchとpreg_match_allを使用して、指定された文字列内の正規表現パターンの実際の一致を見つける方法を知っていますが、私が書いている関数は一致のテキストを必要とするだけでなく、一致の周りの文字列をトラバースすることができます。 。

したがって、正規表現パターンに基づいて、文字列内の一致の位置を知る必要があります。

私は正規表現を可能にするstrpos()に似た関数を見つけることができないようです...何かアイデアはありますか?

35
johnnietheblack

フラグ PREG_OFFSET_CAPTURE そのため:

preg_match('/(bar)/', 'Foobar', $matches, PREG_OFFSET_CAPTURE);
var_export($matches);

結果は次のとおりです。

array (
  0 => 
  array (
    0 => 'bar',
    1 => 3,     // <-- the string offset of the match
  ),
  1 => 
  array (
    0 => 'bar',
    1 => 3,
  ),
)
73
Linus Kleen

preg_matchにはオプションのフラグPREG_OFFSET_CAPTURE、元の「haystack」での一致の発生の文字列位置を記録します。 「フラグ」セクションを参照してください: http://php.net/preg_match

5
Marc B

Preg_match()でPREG_OFFSET_CAPTUREを使用すると、パターンの一致回数を取得できます。一致する場合、これは0から始まるオフセット値を持ちます。

この値を使用すると、offsetパラメーターを使用してpreg_matchを再度呼び出すことができます。

0
PoX