我有一个类似
的字符串 Firstname LastnameFirstname Lastname
我希望将其转换为
Firstname Lastname, Firstname Lastname
PHP中有没有办法搜索这样的字符映射?
答案 0 :(得分:5)
简单/简洁的方法:
$string = preg_replace('/([a-z])([A-Z])/', "$1, $2", $string);
但正如我在上面的评论中所说的那样,Rachel McAdams
会转变为Rachel Mc, Adams
。
答案 1 :(得分:1)
<?php
$str = 'Firstname LastnameFirstname Lastname'; // Set our string
$str = preg_replace('/(\w+ \w+[a-z])([A-Z]\w+ \w+)/', '$1, $2', $str); // Find name boundries and insert comman
echo $str; // Firstname Lastname, Firstname Lastname
?>
答案 2 :(得分:0)
检测大写或小写不是那么难。 PHP没有内置函数,但您可以:
$ord = ord($string[$pos]);
$is_uppercase = $ord <= 90 && $ord >= 65;
然后你可以循环遍历角色并查看你找到的对,可能跳过真正的“短”对,但那将是猜测工作。没有完美的方法可以做到这一点,因为人名没有固定格式。
答案 3 :(得分:0)
有点复杂但工作已经完成
$word = "Firstname LastnameFirstname Lastname";
$word = str_replace('_', ' ', str_replace('_xx', ', ', strtolower(preg_replace('/[^A-Z^a-z^0-9]+/','_',
preg_replace('/([a-z\d])([A-Z])/','\1_xx\2',
preg_replace('/([A-Z]+)([A-Z][a-z])/','\1_\2',$word))))));
echo $word;
首先preg_replace搜索大写的字符串 第二次搜索大写字母与另一个单词组合的字符串 first replace有助于将_xx替换为逗号加空格 第二个用空格代替下划线。