我有一个字符串,其中包含一个或多个用下划线分隔的字母数字代码(以字母开头)。一些代码后跟一个索引号,也用下划线分隔。
我想在每个代码后面插入一个索引号(总是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(我尝试前瞻和后视,但没有成功)或者可能更快的处理器方式。
谢谢! : - )
答案 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);