2013-02-07 44 views
0

我有這樣如何使用正則表達式名稱縮寫

原始數據的原始數據:

  • SRI ISTYANINGSIH
  • DIANA WREDHININGSIH
  • ENDANG啓示Purwaningsih
  • THERESIA Pudji ASTUTIE SARI

,我需要證明它是這樣的:

查看數據:

  • SRI一
  • DIANA W.
  • ENDANG WP
  • THERESIA PAS

我怎樣才能做到這一點使用PHP和正則表達式?

+0

你想只用正則表達式來做到這一點?如果你想用PHP做,然後檢查我的答案。 –

回答

0

這是一個簡單的解決方案,其可以很容易地轉變成一個函數。

$name = 'THERESIA PUDJI ASTUTIE SARI'; 

//split the name to a maximum of 2 array values. 
list ($first_name, $second_names) = explode(' ', $name, 2); 

$second_names = explode(' ', $second_names); 

foreach ($second_names as $key => $value) { 
    $second_names[$key] = $value[0] . '.'; 
} 

echo $first_name . ' ' . implode(' ', $second_names); 
+0

謝謝......這是工作... – Andika

0

我不知道你的意思「做分隔符」是什麼,但這裏是一個基於正則表達式的解決方案:

function shorten_name($name) { 
    return preg_replace('/ (\w)\w*/', ' $1.', $name); 
} 

模式一個空格,然後任意數量的「單詞字符」匹配(\w),即字母(語言環境感知),數字和下劃線,並將其替換爲唯一的空間,第一個字母和一個圓點這個序列。

的修改:

  • 如果你只想從一個匹配大寫字母A到Z就像你的榜樣,更換[A-Z]\w
  • 如果你想匹配任何不是一個空間(即「穆勒 - RIEBENSEE」 =>「M」),\w有(無空格)代替\S
  • 如果你想有其他字符不是空格作爲分隔符,使用字符類和子模式來說太例如:preg_replace('/([\s-])(\w)\w*/', '$1$2.', $name)採取任何空白字符\s或作爲分隔符劃線-(即「穆勒 - RIEBENSEE」 =>「 M.-R.「)
+0

對不起,我的意思是... – Andika

+0

正則表達式,我建議就可能的特殊情況下,一些變化,看到更新的答案。 –

1

假設,是$ var有要轉換的字符串。

$var = "THERESIA PUDJI ASTUTIE SARI"; 

$parts = explode(" ", $var); 
$str = $parts[0]." "; 
for($i=1; $i<count($parts); $i++){ 
    $str .= $parts[$i][0].". "; 
} 

echo $str will give you desired output.