带有数字的图像名称的PHP正则表达式

时间:2014-04-22 12:05:49

标签: php regex

我的图片名称如下:

img-300x300.jpg
img1-250x270.jpg

这些名称将存储在字符串变量中。我的图像是在Wordpress中,所以它将位于例如

mywebsite.com/wp-content/uploads/2012/11/img-300x300.jpg

我需要将字符串更改为

mywebsite.com/wp-content/uploads/2012/11/img.jpg

我需要一个PHP正则表达式,它将返回img.jpg和img1.jpg作为名称。

我该怎么做?

由于

加成

对不起伙计们,我曾尝试过这个但是没有用

$string = 'img-300x300.jpg'
$pattern = '[^0-9\.]-[^0-9\.]';
$replacement = '';
echo preg_replace($pattern, $replacement, $string);

7 个答案:

答案 0 :(得分:2)

您可以使用PHP本机函数本身执行此操作。

<?php

function genLink($imagelink)
{
$img1 = basename($imagelink);
$img = substr($img1,0,strrpos($img1,'-')).substr($img1,strpos($img1,'.'));
$modifiedlink = substr($imagelink,0,strrpos($imagelink,'/'))."/".$img;
return $modifiedlink;
}

echo genLink('mywebsite.com/wp-content/uploads/2012/11/flower-img-color-300x300.jpg');

<强> OUTPUT :

mywebsite.com/wp-content/uploads/2012/11/flower-img-color.jpg

答案 1 :(得分:1)

你可以这样做:

(img\d*)-([^.]*)(\..*)

\1\3将包含您想要的内容:

演示:http://regex101.com/r/vU2mD4

或者,将(img\d*)-([^.]*)(\..*)替换为\1\3

答案 2 :(得分:0)

可能是这个吗?

(\w+)-[^.]+?(\.\w+)

$1$2会给你你想要的东西。

答案 3 :(得分:0)

这是一个有趣的问题,因为你使用的是php,它可以通过分支重置(Perl,PCRE和其他一些引擎的功能)很好地解决。

搜索:img(?|(\d+)-\d{3}x\d{3}|-\d{3}x\d{3})\.jpg

替换:img\1.jpg

与模糊替换相比,此解决方案的好处是我们确信我们匹配的文件的名称与您指定的格式相匹配。

答案 4 :(得分:0)

搜索:\-[^.]+

替换为:''

答案 5 :(得分:0)

(.[^\-]*)(?:.[^\.]*)\.(.*)

第1组 - &#34之前的名称; - &#34;

第2组 - 扩展。 (&#34;。&#34;)之后的所有内容。

答案 6 :(得分:0)

只要一个-和一个.,那么explode()应该对此有用:

<?php

// array of image names
$images = array();
$images[] = 'img-300x300.jpg';
$images[] = 'img1-250x270.jpg';

// array to store new image names
$new_names = array();

// loop through images
foreach($images as $v)
{
    // explode on dashes
    // so we would have something like:
    // $explode1[0] = 'img';
    // $explode1[1] = '300x300.jpg';
    $explode1 = explode('-',$v);

    // explode the second piece on the period
    // so we have:
    // $explode2[0] = '300x300';
    // $explode2[1] = 'jpg';
    $explode2 = explode('.',$explode1[1]);

    // now bring it all together
    // this translates to
    // img.jpg and img1.jpg
    $new_names[] = $explode1[0].'.'.$explode2[1];
}

echo '<pre>'.print_r($new_names, true).'</pre>';

?>