我有下面的例子
$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);
您的问题是,尽管.*
不情愿地匹配,即尽可能少的字符,但它仍然会在 之后立即开始匹配hello
,并且由于它匹配任何字符,因此它将跨“边界”匹配(last
在hello
您的情况下)。
因此,您需要更明确地说明跨边界匹配是不合法的,这就是前瞻断言的用途:
preg_match('/hello((?:(?!hello|last).)*)last(?!.*(?:hello|last)/', $game, $match);
现在hello
and之间的匹配last
禁止包含hello
and/or last
,并且不允许在匹配之后有hello
or last
。
这将返回字符串之前的最后一组数字last
$game = "hello999hello888hello777last";
preg_match('/hello(\d+)last$/', $game, $match);
print_r($match);
输出示例:
Array
(
[0] => hello777last
[1] => 777
)
所以你需要$match[1];
777 值