2015-04-30 42 views
0

对不起,如果标题混乱。所有我想要做的是一些简单的正则表达式:正则表达式后最后/和之前

文本:/thing/images/info.gif

而我想要的是:info

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

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

感谢您的帮助!

+1

为什么不是'$ result = pathinfo('/ thing/images/info.gif',PATHINFO_FILENAME)''? – AbraCadaver

+0

原因我正在刮网页。但在正常情况下好主意! – Kenny

+0

如何回合'[^ /。] +' – AbraCadaver

回答

1

我说你不需要^(.*)(\/)(.*)(\.)(.*)$

将其替换匹配所有的字符串,所以你可以更通用。如果你知道你的字符串总是包含的路径,你可以只使用:

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

,这将是任何有效的文件名,连名字包含像my_file.name.jpg点或场所,如/thing/images/my image.gif

演示here

的结构(从正则表达式移动到左侧的端部):

  • 匹配的字符串的末尾之前
  • 任何数量的由点
  • 任何字符的字符所那不是一个斜杠(你的文件名,如果有斜线,则启动目录)
+0

它工作在regex101,但是当我尝试在我的代码中,它返回'info.gif' – Kenny

+0

更新和测试。我的输出是'Array([0] => info.gif [1] => info)' – ColOfAbRiX

+0

好吧,所以我只需要使用返回数组的'[1]'部分。我喜欢这个更通用的正则表达式,它会工作得最好。谢谢!! – Kenny

0

不知道如何串复杂得多是但这似乎在测试字符串工作:

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

匹配功能不在/.其次.gif

+0

我结束了,它的作品: '$ pattern =“/ [^ \ /。] +(?= \。gif)/”;' '$ strain_01 = preg_match($ pattern,$ filtered_text,$ final_text );' 'return $ final_text [0];' – Kenny

+0

然后你不能在文件名中有多个点! – ColOfAbRiX

0

在编辑器(崇高):

查找:\3

在PHP:

<?php 

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