1

我想从右到左读取字符串。例如,我想50940775$game下面的代码中获取。

我提到了另一个stackoverflow问题。他们说要使用$,但它对我不起作用。我使用下面的代码。

$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';

preg_match('/\/(.*?)black$/', $game, $match);
print_r($match[1]);

注意:$game Url与下面的不同

http://www.myspace.com/sdsf/1223232/black/video/50940775black
http://www.myspace.com/sdsf/1223232/videos/12345/50940775black
http://www.myspace.com/sdsf/1223232/videos/games129kj/5675999black
4

2 回答 2

1

由于您想获取数字,您可以指定只需要它们 ( [0-9]+) 而不是所有东西 ( .*)。使用.*它将检索第一个/找到的 和之间的所有内容black。所以,在你的情况下:/www.myspace.com/sdsf/1223232/videos/video/50940775black

试试这个:

$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';

preg_match('/\/([0-9]+)black$/', $game, $match);
print_r($match[1]);

现场演示

编辑:

事实上,很难从右到左阅读。您可以做的是分解网址/,然后使用最后一部分应用您的正则表达式:

<?php

$game = explode('/', 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black');
$data = end($game);

preg_match('/(.*?)black$/', $data, $match);
print_r($match[1]);
于 2013-02-03T17:09:35.947 回答
1

尝试这样的事情:

$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';
preg_match('/\/([^\/]+)black$/', $game, $match);
print_r($match[1]);

为什么以前不工作?这与贪婪的本性有关。非贪婪运算符不会导致正则表达式在字符串中找到最短的匹配项。它找到不包含任何其他匹配项的第一个匹配项。如果您使用它找到的匹配项并开始回溯,您将永远不会从它找到的匹配项的开头找到另一个与该字符串匹配的子字符串first。这是一个微妙的区别。

在写这篇文章时,我看到有人建议只寻找数字。只要您确定只有数字,这也将起作用。如果您的目的是获取最接近的/和之间的任何内容black,那么正则表达式正是针对该目标的。

于 2013-02-03T17:29:42.383 回答