使用Twig preg_replace将最后一个匹配项替换为字符串的结尾

时间:2017-01-21 19:46:08

标签: php string symfony twig preg-replace

我正在使用带有插件(https://github.com/jasny/twig-extensions)的PHP的Twig模板,其中包含preg_replace等函数。

我有以下字符串:

Coverking_CSC_Neosupreme_1Row-F-150_Series-01-MASS 
Coverking_CSC_Neosupreme_1Row-F-150_Series-01-ANYTHING
Coverking_CSC_Neosupreme_1Row-F-150_Series-01

我想用空字符串替换最后一次出现的-XX或-XXANYTHING。

所以上面所有字符串的替换结果应该是

Coverking_CSC_Neosupreme_1Row-F-150_Series

我设法在线查找并找到以下正则表达式来删除最后一次出现的-XX

str|preg_replace("/\-[0-9]{2}(?!.*\-[0-9]{2})/","")

如何修改上述正则表达式以获得所需的结果?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用:

preg_replace("/-\d\d(-.*|)$/","","Coverking_CSC_Neosupreme_1Row-F-150_Series-01-MASS");

答案 1 :(得分:0)

如果要从-XX-中删除任何内容,直到结尾,请使用$锚点字符来定义您希望匹配到字符串的最后一个字符。

您可以这样做:

{{ str|preg_replace("/\-[0-9]{2}(\-[\w\-]+)?$/", "") }}

\ w匹配0-9 A-Z和a-z。

请参阅正则表达式:

https://regex101.com/r/aiKMDn/2

编辑:

更新了正则表达式,使-XX之后的任何内容成为可选匹配,直到字符串结束。