2

Basically what I want to do is replace a filename so that

whatever-[xxx]-[xxx].[xxx] becomes whatever-150-150.[xxx]

so if I have:

aisuiuhviu123ounsciun-174-345.JPG becomes aisuiuhviu123ounsciun-150-150.JPG

and

wuernicun-123-25.png becomes wuernicun-150-150.png

so far I have got the last bit (file extension) figured out with /(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG)/

but the number part is really confusing basically the file will always be:

[string]-[2-4 numbers]-[2-4 numbers].[original file extension]

One day I will get around to reading the entire regex reference but it's baffling to me.

4

2 回答 2

1

我可能会误解你的问题..但-[\d]+应该做你所追求的。它将匹配一个破折号 (-) 后跟一个整数。然后你只需要用破折号和150替换它。如果你不打算改变它,你不需要匹配扩展名。事实上,除了数字和破折号之外,您不需要匹配任何内容来完成您需要的操作。

于 2012-08-24T01:31:57.357 回答
1

我认为这应该可以解决问题(假设文件名存储在适当命名的变量中):

preg_replace("/([^-]+)-\d{2,4}-\d{2,4}\.(.+)/i", "$1-150-150.$2", $filename);

我们在这里做什么?我们看看吧:

  1. 我们将名称的第一部分与([^-]+).
  2. 然后用 破折号-
  3. 然后是一个数字(长度在 2 到 4 位之间):\d{2,4}
  4. 然后是另一个破折号:-
  5. 然后是另一个数字:\d{2,4}
  6. 然后是一个字面点:\.
  7. 然后是文件扩展名(可以是什么):(.+)

请注意,我们在步骤 1 和 7 中使用捕获组,因此我们可以在替换中使用这些值。学习正则表达式是值得的;它们是一个强大的工具。

于 2012-08-24T01:33:01.957 回答