PHP regex wordpress图像名称


php regex wordpress image names

我想使用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}$/