私はpreg_matchとpreg_match_allを使用して、指定された文字列内の正規表現パターンの実際の一致を見つける方法を知っていますが、私が書いている関数は一致のテキストを必要とするだけでなく、 ...文字列の正規表現一致の位置を取得するには?
したがって、正規表現パターンに基づいて、文字列内の一致の位置を知る必要があります。
正規表現を許可するstrpos()と似た関数を見つけることができません...任意のアイデア?
私はpreg_matchとpreg_match_allを使用して、指定された文字列内の正規表現パターンの実際の一致を見つける方法を知っていますが、私が書いている関数は一致のテキストを必要とするだけでなく、 ...文字列の正規表現一致の位置を取得するには?
したがって、正規表現パターンに基づいて、文字列内の一致の位置を知る必要があります。
正規表現を許可するstrpos()と似た関数を見つけることができません...任意のアイデア?
あなたはそのためのフラグ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,
),
)
なぜ結果が2回返されましたか? – ananda
@anandaこの最初の一致は、正規表現の* all *です。 2番目は最初のキャプチャグループです。偶然、上記のコードではどちらも同じです。たとえば、正規表現が '/ Foo(bar)/'だった場合、最初の結果はオフセットが0の 'Foobar'で、2番目の結果は' bar''(オフセットが3)です。上記。 –
するpreg_matchは元に試合の出現の文字列の位置を記録オプションのフラグ、PREG_OFFSET_CAPTURE
を、持っています'干し草'。
preg_match()でPREG_OFFSET_CAPTUREを使用すると、パターンの一致回数が取得されます。一致する場合、オフセット値は0から始まります。
この値を使用すると、オフセットパラメータを使用してpreg_matchを再度呼び出すことができます。
一度一致すると、 'strpos()'を使ってその位置を見つけることができませんか? – scibuff
重複:http://stackoverflow.com/questions/3547564/running-a-regular-expression-need-to-find-exact-location-of-a-string-patterns – michaelmichael
あなたの試合ができたらstrpos()を使用して文字列内の位置を見つけます。 – SenorAmor