0
我有一個字符串,其中包含一個或多個以下劃線分隔的字母數字代碼(以字母開頭)。一些代碼後跟一個索引號,它也用一個下劃線分開。在未跟隨數字組的字母數字組之後插入數字
我想在每個未被索引跟蹤的代碼之後插入一個索引號(總是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做到這一點(我試過向前看,向後看,沒有成功),或者可能更快,處理器更明智的另一種方式。
謝謝! :-)
啊,哈!現在我理解了關於lookahead的'零寬度'說明!我可以有一個正面的和負面的,最終檢查相同的字符(在這種情況下,'_')。 乾杯! – Goozak
您是否相信我在使用它們五年之後才意識到我可以將多個數據結合在一起。哦,我可以拯救的時間... – Wrikken