Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 普通快车从右向左读取_Php_Regex - Fatal编程技术网

Php 普通快车从右向左读取

Php 普通快车从右向左读取,php,regex,Php,Regex,我想从右向左读字符串。例如,我想从下面代码中的$game获取50940775 $game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black'; preg_match('/\/(.*?)black$/', $game, $match); print_r($match[1]); 我提到了另一个问题。他们说使用$,但这对我不起作用。我使用下面的代码 $game = 'http://www.myspace.com/sd

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

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

preg_match('/\/(.*?)black$/', $game, $match);
print_r($match[1]);
我提到了另一个问题。他们说使用
$
,但这对我不起作用。我使用下面的代码

$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

因为您想要获取数字,所以可以指定您只想要它们(
[0-9]+
),而不是所有东西(
*
)。使用
*
它将检索从找到的第一个
/
黑色的
之间的所有内容。因此,在您的情况下:
/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]);

编辑:

事实上,很难从右到左阅读。您可以通过
/
分解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]);

请尝试以下方法:

$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';
preg_match('/\/([^\/]+)black$/', $game, $match);
print_r($match[1]);
为什么它以前不工作?这与贪婪的本质有关。非贪婪运算符不会导致正则表达式在字符串中找到尽可能短的匹配项。它查找不包含任何其他匹配项的第一个匹配项。如果您获取它找到的匹配项并开始回溯,则从它首先找到的匹配项开始,您将永远不会找到与该字符串匹配的另一个子字符串。这是一个微妙的区别


在写这篇文章时,我看到有人建议只查找数字。这也行得通,只要你确定那里只有数字。如果您的目的是获取最接近的
/
黑色之间的任何内容,那么正则表达式的目标就是它。

我建议使用
@
作为正则表达式分隔符,我想从中获得线索