php正则表达式问题

时间:2011-07-06 17:54:17

标签: php regex

如何捕获并提交以下文件名

输入:

../images/imgac00000001.jpg
../images/imgbc00000002.jpg
../images/img1111.jpg

Outout:

imgac00000001
imgbc00000002

我在PHP中尝试过使用preg_replace,我不知道如何正确使用它。

preg_replace('/(img)[a-z]{0,2}[0-9]*/i', '$1', $img_path);

由于

5 个答案:

答案 0 :(得分:3)

获取文件名的简便方法:

$file_info = pathinfo('../images/imgac00000001.jpg');
print $file_info['filename'];

答案 1 :(得分:1)

您需要使用preg_match_all,而不是preg_replace

$input = <<<EOF
../images/imgac00000001.jpg
../images/imgbc00000002.jpg
../images/img1111.jpg
EOF;

//imgac00000001
//imgbc00000002


preg_match_all('/img[a-z]{0,2}[0-9]*/i', $input, $matches);

print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => imgac00000001
            [1] => imgbc00000002
            [2] => img1111
        )

)

答案 2 :(得分:0)

如果基本路径相同,为什么不使用str_replace?

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

$image = "../images/imgac00000001.jpg";
$name = str_replace(array('../images/','.jpg','.png'),'',$image);

您可以将str_ireplace()用于不区分大小写的情况。

Manual on str_replace

答案 3 :(得分:0)

尝试preg_replace('/((img)[a-z]{0,2}[0-9]*)/i', '$1', $img_path);在整个表达式周围添加额外的括号。

答案 4 :(得分:0)

你不需要正则表达式,你可以做一些事情:

$str = '../images/imgac00000001.jpg';
$str = array_shift(explode('.', end(explode('/', $str))));

但这是你的正则表达式:

$str = '../images/imgac00000001.jpg';
preg_match('/\/([^\/\.]+)\./', $str, $matches);