首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从右到左的常规快速阅读

从右到左的常规快速阅读
EN

Stack Overflow用户
提问于 2013-02-04 01:05:35
回答 2查看 771关注 0票数 1

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

我提交了另一个堆栈溢出问题。他们说要用$,但对我不起作用。我使用下面的代码。

代码语言:javascript
复制
$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';

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

注意:$game Url不同,如下所示

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-04 01:09:36

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

试试这个:

代码语言:javascript
复制
$game = 'http://www.myspace.com/sdsf/1223232/videos/video/50940775black';

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

Live demo

编辑:

事实上,它很难从右向左阅读。你能做的就是用/分解url,然后用最后一部分来应用你的正则表达式:

代码语言:javascript
复制
<?php

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

preg_match('/(.*?)black$/', $data, $match);
print_r($match[1]);
票数 1
EN

Stack Overflow用户

发布于 2013-02-04 01:29:42

试试下面这样的代码:

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

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

在写这篇文章的时候,我发现有人建议你只看数字。这也是可行的,只要你确定那里只有数字。如果您的目的是获取最接近的/black之间的任何内容,那么正则表达式正是以此为目标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14674915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档