在字母数字组之后插入数字,而不是数字组

时间:2011-07-20 21:45:55

标签: php regex preg-replace

我有一个字符串,其中包含一个或多个用下划线分隔的字母数字代码(以字母开头)。一些代码后跟一个索引号,也用下划线分隔。

我想在每个代码后面插入一个索引号(总是1)。

以下是一些示例:

one                 =>  one_1
one_tw2_tre_for     =>  one_1_tw2_1_tre_1_for_1
one_tw2_tre_23_for  =>  one_1_tw2_1_tre_23_for_1
one_3_tw2_4_tre_45  =>  one_3_tw2_4_tre_45

我可以通过两次调用preg_replace来实现:

// Add '_1' after each code
$s = preg_replace('/[A-Za-z][A-Za-z0-9]+/', '$0_1', $s);
// Remove '_1' when followed by index
$s = preg_replace('/_1_([0-9]+)/', '_$1', $s);

我想知道是否有两种方法可以只使用一个preg_replace(我尝试前瞻和后视,但没有成功)或者可能更快的处理器方式。

谢谢! : - )

1 个答案:

答案 0 :(得分:1)

preg_replace('/[A-Za-z][A-Za-z0-9]+(?!_[0-9]|[A-Za-z0-9])/', '$0_1', $s);

或者,更简洁:

preg_replace('/[A-Za-z][A-Za-z0-9]+(?=_|$)(?!_[0-9])/', '$0_1', $s);