PHP-正则表达式 - 如何从右到左阅读

时间:2013-01-01 17:55:25

标签: php regex preg-match

我有以下示例

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

上面的代码返回 999hello888hello777 ,我需要的是在 Last 之前检索值,即 777 。所以我需要阅读正则表达式从右到左阅读。

4 个答案:

答案 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}}比赛结束后。