首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在正则表达式中,如何仅替换相同字符串的某些实例?

在正则表达式中,如何仅替换相同字符串的某些实例?
EN

Stack Overflow用户
提问于 2012-08-24 09:26:48
回答 2查看 60关注 0票数 2

基本上,我想要做的是替换一个文件名,以便

whatever-[xxx]-[xxx].[xxx]成为whatever-150-150.[xxx]

所以如果我有:

aisuiuhviu123ounsciun-174-345.JPG成为aisuiuhviu123ounsciun-150-150.JPG

wuernicun-123-25.png成为wuernicun-150-150.png

到目前为止,我已经用/(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG)/弄清楚了最后一点(文件扩展名)

但数字部分确实令人困惑,基本上文件将始终是:

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

总有一天,我会花时间阅读整个regex参考,但它让我感到困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-24 09:33:02

我认为这应该可以做到这一点(假设文件名存储在一个适当命名的变量中):

代码语言:javascript
复制
preg_replace("/([^-]+)-\d{2,4}-\d{2,4}\.(.+)/i", "$1-150-150.$2", $filename);

我们在这里做什么?让我们来看看:

另一个数字:\d{2,4}

  • Then另一个短划线:-

  • Then
  1. \d{2,4}
  2. Then一个文字点:\.
  3. Then文件扩展名(可以是任意的):(.+)

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-24 09:31:57

我可能误解了你的问题。但是-[\d]+应该做你想做的事情。它将匹配一个短划线(-),后跟一个整数。然后,您只需将其替换为破折号和150。如果您不打算更改扩展名,则不需要匹配它。事实上,你不需要匹配任何东西,只需要匹配数字和破折号就可以完成你需要的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12102139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档