我想使用PHP函数preg_replace删除图像文件名中附加的尺寸。我们的CMS将尺寸添加到文件名的末尾,就在扩展名之前。由于遗留原因,命名约定不一致:有时下划线在前面,其他时候是破折号。
在我的前端代码中去掉尺寸将是超级有用的。
是否有一个PHP正则表达式可以匹配以下场景:
Example-Filename,-lorem-ipsum_999x999.jpg
[need to match: _999x999]
Example-Filename2-lorem,-ipsum-42x42.PNG
[需要匹配:-42x42]
Example-Filename3-lorem-Ipsum-dolor-blah_0128x0256.jpeg
[need to match: _0128x0256]
这是你想要的:
/[_-]'d+x'd+(?='.[a-z]{3,4}$)/i
解释:
-
[_-]
匹配_
或-
-
'd+
匹配一串数字 -
x
是文字x
-
'd+
匹配一串数字 -
(?='.[a-z]{3,4}$)
是一个前向组,表示匹配之后必须有.
、3-4个字母和字符串的结尾。
Try with Positive Lookahead and capture group
[_-][^_-]+(?='.)
现场演示
你的PHP代码应该是,
<?php
$data = <<<'EOT'
Example-Filename,-lorem-ipsum_999x999.jpg
Example-Filename2-lorem,-ipsum-42x42.PNG
Example-Filename3-lorem-Ipsum-dolor-blah_0128x0256.jpeg
EOT;
$regex = '~[_-][^_-]+(?='.)~';
preg_match_all($regex, $data, $matches);
var_dump($matches);
?>
输出:array(1) {
[0]=>
array(3) {
[0]=>
string(8) "_999x999"
[1]=>
string(6) "-42x42"
[2]=>
string(10) "_0128x0256"
}
}
这个正则表达式将匹配/([-_]'d+?x'd+?)'.[a-zA-Z]{3,4}$/