替换最后一个下划线后的字符

时间:2014-10-16 06:42:50

标签: php regex

我有一个具有以下结构的字符串。我想替换最后一个下划线后的字符。

$string = ' 
   {$9018049_text_50024080_3} : {$9018049_text_53441884_3} 
   {$9018049_text_50024080_4} : {$9018049_text_53441884_4} 
   {$9018049_text_50024080_5} : {$9018049_text_53441884_5} 
  ';

例如,如果我替换字符" 5"使用" DT5",输出应为

$string = ' 
   {$9018049_text_50024080_3} : {$9018049_text_53441884_3} 
   {$9018049_text_50024080_4} : {$9018049_text_53441884_4} 
   {$9018049_text_50024080_DT5} : {$9018049_text_53441884_DT5} 
  ';

我试过str_replace,但输出是

$string = ' 
   {$9018049_text_DT50024080_3} : {$9018049_text_DT53441884_3} 
   {$9018049_text_DT50024080_4} : {$9018049_text_DT53441884_4} 
   {$9018049_text_DT50024080_DT5} : {$9018049_text_DT53441884_DT5} 
  ';

这不是我想要的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果我理解得很好:

$string = str_replace('_5}', '_DT5}', $string);

如果你想对花括号之间的每个内容做同样的事情,无论数字是什么:

$string = preg_replace('~_(\d+})~', '_DT$1', $string);

答案 1 :(得分:0)

使用前瞻性正则表达式搜索:

_5(?=})

并替换为:

_DT5

此处(?=})将确保_5后跟}

RegEx Demo

答案 2 :(得分:0)

选择最后一行:

\n.*$

替换正则表达式:

_\d(?=})