Php 在正则表达式中,如何仅替换相同字符串的某些实例?
基本上我想做的是替换一个文件名Php 在正则表达式中,如何仅替换相同字符串的某些实例?,php,regex,string,Php,Regex,String,基本上我想做的是替换一个文件名 whatever-[xxx]-[xxx].[xxx]变成whatever-150-150.[xxx] 因此,如果我有: aisuihviu123ounsciun-174-345.JPG变为aisuihviu123ounsciun-150-150.JPG 及 wuernichun-123-25.png变为wuernichun-150-150.png 到目前为止,我已经用/(jpg | jpg | jpeg | jpeg | gif | gif | png | png
whatever-[xxx]-[xxx].[xxx]
变成whatever-150-150.[xxx]
因此,如果我有:
aisuihviu123ounsciun-174-345.JPG
变为aisuihviu123ounsciun-150-150.JPG
及
wuernichun-123-25.png
变为wuernichun-150-150.png
到目前为止,我已经用/(jpg | jpg | jpeg | jpeg | gif | gif | png | png)/
但数字部分确实令人困惑,基本上,文件始终是:
[string]-[2-4个数字]-[2-4个数字][原始文件扩展名]
总有一天我会抽出时间阅读整个正则表达式参考,但这让我感到困惑。我可能会误解你的问题。。但是
-[\d]+
应该做你想要做的事情。它将匹配一个破折号(-),后跟一个整数。然后你只需要用破折号和150替换它。如果不打算更改扩展名,则不需要匹配扩展名。事实上,除了数字和破折号之外,您不需要匹配任何东西就可以完成所需的任务。我认为这应该可以做到这一点(假设文件名存储在适当命名的变量中):
我们在这里干什么?让我们看看:
([^-]+)
匹配-
划一个破折号\d{2,4}
-
\d{2,4}
\。
(.+)
请注意,我们在步骤1和7中使用了捕获组,因此我们可以在替换中使用这些值。学习正则表达式是值得的;他们是一个强大的工具。无论谁——我问了这个问题,都应该在问题中发表评论。是的,我觉得这也有点粗鲁。。。谢谢@HeatfanJohn:-)
preg_replace("/([^-]+)-\d{2,4}-\d{2,4}\.(.+)/i", "$1-150-150.$2", $filename);