以下の例があります
$game = "hello999hello888hello777last";
preg_match('/hello(.*?)last/', $game, $match);
上記のコードは999hello888hello777を返します。必要なのは、 Lastの直前の値(つまり777 )を取得することです。したがって、右から左に読み取るには正規表現を読み取る必要があります。
以下の例があります
$game = "hello999hello888hello777last";
preg_match('/hello(.*?)last/', $game, $match);
上記のコードは999hello888hello777を返します。必要なのは、 Lastの直前の値(つまり777 )を取得することです。したがって、右から左に読み取るには正規表現を読み取る必要があります。
$game = strrev($game);
どのようにそのことについて?:D
次に、正規表現を逆にします^ __ ^
文字列を逆にしてみませんか?PHPのstrrevを使用してから、正規表現を逆にします。
$game = "hello999hello888hello777last";
preg_match('/tsal(.*?)elloh/', strrev($game), $match);
これにより、文字列の前の最後の数字セットが返されますlast
$game = "hello999hello888hello777last";
preg_match('/hello(\d+)last$/', $game, $match);
print_r($match);
出力例:
Array
(
[0] => hello777last
[1] => 777
)
$match[1];
したがって、777の値が必要になります
あなたの問題は、.*
しぶしぶ一致しますが、つまり可能な限り少ない文字ですが、それでも直後に一致し始め、任意のhello
文字と一致するため、「境界」全体(およびあなたの場合)で一致することです。last
hello
したがって、境界を越えて一致させることは合法ではないという事実についてより明確にする必要があります。これが先読みアサーションの目的です。
preg_match('/hello((?:(?!hello|last).)*)last(?!.*(?:hello|last)/', $game, $match);
現在、との間の一致はhello
、および/またはlast
を含むことを禁止されており、一致すること、または一致することは許可されていません。hello
last
hello
last