2015-07-21 33 views
-2

我havea系列在以下格式字符串的刪除在串數字有些結尾數字...PHP按組

aebvaejbh286720467-snehndfn3984777-sobn3895 

jklasebntb-nlb93876-adbnbnbn-34978 

357896-alalalalalal3986-bh3806-023847 

等。

我需要在任何一組所有的字母和破折號,但只有前兩個數字, 因此,例如:

aebvaejbh286720467-snehndfn3984777-sobn3895 

將成爲

aebvaejbh28-snehndfn39-sobn38 

jklasebntb-nlb93876-adbnbnbn-34978 

會變成

jklasebntb-nlb93-adbnbnbn-34 

357896-alalalalalal3986-bh3806-023847 

將成爲

35-alalalalalal39-bh38-02 

等。

我想我可以在bash中用sed/awk做到這一點,但我需要在php中完成。 任何想法都會很棒。

+0

嘗試使用的preg_match – rjdown

回答

0

我會建立一個新的字符串,並一次添加一個字符,同時保持計數我已經添加了多少個數字。如果該字符不是數字,則將其添加 - 如果是,則只有在第一個或第二個數字時才添加。

$string = '357896-alalalalalal3986-bh3806-023847'; 
    $result = ''; 
    $digit_count = 0; 

    foreach(str_split($string) as $character) { 

    if(!is_numeric($character) || ++$digit_count <= 2) 
     $result .= $character; 

    if($character == '-') 
     $digit_count = 0; 
    } 

    print $result; 
0

這可以簡單地通過使用preg_replace其使用正則表達式作爲第一個參數來實現。

preg_replace('~(\d{2})\d*~', '\1', $str); 

preg_replace('~\d{2}\K\d*~', '', $str); 

DEMO