10

2つの正規表現があるとしましょう。

/eat (apple|pear)/
/I like/

とテキスト

"I like to eat apples on a rainy day, but on sunny days, I like to eat pears."

私が望むのは、preg_match で次のインデックスを取得することです。

match: 0,5 (I like)
match: 10,19 (eat apples)
match: 57,62 (I like)
match: 67,75 (eat pears)

毎回テキストをループせずに preg_match_all を使用してこれらのインデックスを取得する方法はありますか?

編集: ソリューションPREG_OFFSET_CAPTURE !

4

2 に答える 2

26

PREG_OFFSET_CAPTURE次のフラグを試すことができますpreg_match()

$subject="I like to eat apples on a rainy day, but on sunny days, I like to eat pears.";
$pattern = '/eat (apple|pear)/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE );
print_r($matches);

出力

$ php test.php
Array
(
    [0] => Array
        (
            [0] => eat apple
            [1] => 10
        )

    [1] => Array
        (
            [0] => apple
            [1] => 14
        )

)
于 2010-03-16T03:23:58.107 に答える