正则表达式在最后一次/之后

时间:2015-04-30 15:31:02

标签: php regex

很抱歉,标题令人困惑。我所要做的就是一些简单的正则表达式:

文字:/thing/images/info.gif

我想要的是:info

我的正则表达式(不完全正常):([^\/]+$)(.*?)(?=\.gif)

(注意:[^\/]+$会返回info.gif

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我说你不​​需要匹配所有字符串,所以你可以更通用。如果您知道您的字符串始终包含您可以使用的路径:

preg_match( '/([^\/]+)\.\w+$/', "/thing/images/info.gif", $matches) ;
print_r( $matches );

它对任何文件名都有效,甚至包含my_file.name.jpg之类的点或/thing/images/my image.gif

等空格的名称

演示here

结构是(从正则表达式的末尾向左移动):

  • 在字符串结尾之前匹配
  • 以点开头的任意数量的字符
  • 任何不是斜杠的字符(您的文件名,如果有斜杠,则会启动目录)

答案 1 :(得分:0)

不确定字符串有多复杂,但这似乎适用于测试字符串:

preg_match('![^/.]+(?=\.gif)!', '/thing/images/info.gif', $m);

匹配不/.后跟.gif

答案 2 :(得分:0)

编辑(Sublime):

查找:^(.*)(\/)(.*)(\.)(.*)$

将其替换为:\3

在PHP中:

<?php

preg_match('/^(.*)(\/)(.*)(\.)(.*)$/', '/thing/images/info.gif', $match);
echo $match[3];