如何为名称缩写制作正则表达式

时间:2013-02-07 06:46:50

标签: php regex

我有这样的原始数据

原始数据:

  • SRI ISTYANINGSIH
  • DIANA WREDHININGSIH
  • ENDANG WAHYU PURWANINGSIH
  • THERESIA PUDJI ASTUTIE SARI

我需要像这样展示:

查看数据:

  • SRI I。
  • DIANA W。
  • ENDANG W. P。
  • THERESIA P. A. S。

如何使用PHP和正则表达式完成此操作?

3 个答案:

答案 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.

答案 1 :(得分: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);

答案 2 :(得分:0)

我不知道你对“make delimiter”的意思,但这是一个基于正则表达式的解决方案:

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

模式匹配空格后跟任意数量的“单词字符”(\w),即字母(区域设置),数字和下划线,然后仅用空格,第一个字母和一个替换此序列点。

可能的修改:

  • 如果您只想匹配示例中的A-Z大写字母,请将\w替换为[A-Z]
  • 如果您想匹配任何非空格(即“MÜLLER-RIEBENSEE”=&gt;“M。”),请将\w替换为\S(非空格)。
  • 如果您希望将空格以外的其他字符作为分隔符,请使用字符类和子模式,例如:preg_replace('/([\s-])(\w)\w*/', '$1$2.', $name)可以使用任何空格字符\s或短划线-作为分隔符(即“MÜLLER-RIEBENSEE”=&gt;“M.-R。”)