搜索小写然后大写?

时间:2011-08-23 19:13:27

标签: php

我有一个类似

的字符串

Firstname LastnameFirstname Lastname

我希望将其转换为

Firstname Lastname, Firstname Lastname

PHP中有没有办法搜索这样的字符映射?

4 个答案:

答案 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替换为逗号加空格 第二个用空格代替下划线。