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

您的问题是,尽管.*不情愿地匹配,即尽可能少的字符,但它仍然会在 之后立即开始匹配hello,并且由于它匹配任何字符,因此它将跨“边界”匹配(lasthello您的情况下)。

因此,您需要更明确地说明跨边界匹配是不合法的,这就是前瞻断言的用途:

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

现在helloand之间的匹配last禁止包含helloand/or last,并且不允许在匹配之后有helloor last

于 2013-01-01T18:00:37.603 回答
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 回答