PHP正则表达式以精确的给定模式进行搜索

时间:2012-10-09 14:09:53

标签: php regex

我想给正则表达式一个模式并强制它读取它...

http://example.com/w/2/1/x/some-12345_x.png

我想定位“some-12345_x”
我使用了这个/\/(.*).png/,它由于某种原因不起作用

我如何强制它记住它必须以/开始并以.png结束?

4 个答案:

答案 0 :(得分:1)

你可以这样做:

^.*/(.*)\.png$

捕获最后/到最后.png之后发生的事情。

答案 1 :(得分:1)

如果你总是希望获得最终的文件名,减去扩展名,你可以使用PHP的substr()而不是试图提出一个正则表达式:

$lastSlash = strrpos($url, '/') + 1;
$name = substr($url, $lastSlash, strrpos($url, '.') - $lastSlash);

此外,更易读的方法是使用PHP的basename()

$filename = basename($url);
$name = substr($filename, 0, strpos($filename, '.'));

要实际使用正则表达式,您可以使用以下模式:

.*/([^.]+).png$

使用PHP的preg_match()

preg_match('|.*/([^.]+).png$|', $url, $matches);
$name = $matches[1];

答案 2 :(得分:1)

出于特殊原因,你可能需要在这种情况下使用reg-ex,但是如果不这样做,可以选择使用reg-ex:

$url = "http://example.com/w/2/1/x/some-12345_x.png";
$value = pathinfo($url);
echo $value['filename'];

输出:

some-12345_x
手册

中的

pathinfo()

答案 3 :(得分:1)

怎么样:

~([^/]+)\.png$~

这将匹配除/之外的任何内容,直到字符串末尾的.png