我有以下示例
$game = "hello999hello888hello777last";
preg_match('/hello(.*?)last/', $game, $match);
上面的代码返回 999hello888hello777 ,我需要的是在 Last 之前检索值,即 777 。所以我需要阅读正则表达式从右到左阅读。
答案 0 :(得分:1)
$game = strrev($game);
怎么样? :d
然后只需反转正则表达式^ __ ^
答案 1 :(得分:1)
为什么不反转字符串呢?使用PHP的strrev,然后反转正则表达式。
$game = "hello999hello888hello777last";
preg_match('/tsal(.*?)elloh/', strrev($game), $match);
答案 2 :(得分:1)
这将返回字符串last
$game = "hello999hello888hello777last";
preg_match('/hello(\d+)last$/', $game, $match);
print_r($match);
输出示例:
Array
(
[0] => hello777last
[1] => 777
)
因此,您需要$match[1];
获取777值
答案 3 :(得分:0)
你的问题是虽然.*
不情愿地匹配,但我。即尽可能少的字符,它仍然会在hello
之后立即开始匹配,并且由于它匹配任何字符,因此它将跨越“边界”(last
和{{1在你的情况下)。
因此,您需要更明确地说明跨越边界匹配是不合法的,这就是前瞻性断言的用途:
hello
现在,preg_match('/hello((?:(?!hello|last).)*)last(?!.*(?:hello|last)/', $game, $match);
和hello
之间的匹配被禁止包含last
和/或hello
,并且不允许last
或{{ 1}}比赛结束后。