首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名称缩写的regex实现方法

名称缩写的regex实现方法
EN

Stack Overflow用户
提问于 2013-02-07 06:46:49
回答 3查看 1.1K关注 0票数 0

我有这样的原始数据

原始数据:

  • ISTYANINGSIH
  • 黛安娜·韦丁
  • 恩当瓦湖
  • [医]蒲地菜萨里

我需要这样表现出来:

视图数据:

  • 斯里岛
  • 戴安娜W.
  • 恩当W.
  • THERESIA P.A.S.

如何使用PHP和正则表达式来完成这一任务?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-07 07:05:25

这是一个简单的解决方案,可以很容易地转化为一个函数。

代码语言:javascript
复制
$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);
票数 1
EN

Stack Overflow用户

发布于 2013-02-07 07:19:43

假设$var有您想要转换的字符串。

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2013-02-07 07:10:09

我不知道"make定界符“是什么意思,但是这里有一个基于正则表达式的解决方案:

代码语言:javascript
复制
function shorten_name($name) {
    return preg_replace('/ (\w)\w*/', ' $1.', $name);
}

该模式匹配一个空格,后面跟着任意数量的“单词字符”(\w),即字母(知道地区)、数字和下划线,然后用空格、第一个字母和一个点替换这个序列。

可能的修改:

  • 如果您只想匹配A-Z的大写字母,如您的示例中所示,请将\w替换为[A-Z]
  • 如果您想匹配任何不是空格的内容(例如( =>“M”),用\S (非空格)代替\w
  • 如果您想使用空格以外的其他字符作为分隔符,也可以使用字符类和子模式(例如:preg_replace('/([\s-])(\w)\w*/', '$1$2.', $name) )以任何空白字符\s或破折号-作为分隔符(例如,“M LLER-RIEBENSEE”=>“M”)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14745226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档