我想从右到左读字符串。例如,我想在下面的代码中从$game获取50940775。
我提交了另一个堆栈溢出问题。他们说要用$,但对我不起作用。我使用下面的代码。
$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发布于 2013-02-04 01:09:36
因为您想要获取数字,所以可以指定只需要它们([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]);Live demo。
编辑:
事实上,它很难从右向左阅读。你能做的就是用/分解url,然后用最后一部分来应用你的正则表达式:
<?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-04 01:29:42
试试下面这样的代码:
$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';
preg_match('/\/([^\/]+)black$/', $game, $match);
print_r($match[1]);为什么它以前不能工作?这与贪婪的本质有关。非贪婪运算符不会导致正则表达式在字符串中查找可能的最短匹配。它查找不包含任何其他匹配的第一个匹配。如果您采用它找到的匹配项并开始回溯,则从它找到的第一个的匹配项开始,您将永远不会找到另一个与该字符串匹配的子字符串。这是一个细微的区别。
在写这篇文章的时候,我发现有人建议你只看数字。这也是可行的,只要你确定那里只有数字。如果您的目的是获取最接近的/和black之间的任何内容,那么正则表达式正是以此为目标。
https://stackoverflow.com/questions/14674915
复制相似问题