2

以下の例があります

$game = "hello999hello888hello777last";
preg_match('/hello(.*?)last/', $game, $match);

上記のコードは999hello888hello777を返します。必要なのは、 Lastの直前の値(つまり777 )を取得することです。したがって、右から左に読み取るには正規表現を読み取る必要があります。

4

4 に答える 4

3
$game = strrev($game);

どのようにそのことについて?:D

次に、正規表現を逆にします^ __ ^

于 2013-01-01T17:57:48.467 に答える
2

文字列を逆にしてみませんか?PHPのstrrevを使用してから、正規表現を逆にします。

$game = "hello999hello888hello777last";
preg_match('/tsal(.*?)elloh/', strrev($game), $match);
于 2013-01-01T17:58:26.120 に答える
1

これにより、文字列の前の最後の数字セットが返されますlast

$game = "hello999hello888hello777last";
preg_match('/hello(\d+)last$/', $game, $match);
print_r($match);

出力例:

Array
(
    [0] => hello777last
    [1] => 777
)

$match[1];したがって、777の値が必要になります

于 2013-01-01T18:00:17.843 に答える
1

あなたの問題は、.*しぶしぶ一致しますが、つまり可能な限り少ない文字ですが、それでも直後に一致し始め、任意のhello文字と一致するため、「境界」全体(およびあなたの場合)で一致することです。lasthello

したがって、境界を越えて一致させることは合法ではないという事実についてより明確にする必要があります。これが先読みアサーションの目的です。

preg_match('/hello((?:(?!hello|last).)*)last(?!.*(?:hello|last)/', $game, $match);

現在、との間の一致はhello、および/またはlastを含むことを禁止されており、一致すること、または一致することは許可されていません。hellolasthellolast

于 2013-01-01T18:00:37.603 に答える