我正在尝试转换以下字符串:
1. WILL SMITH 2. ETO NABULI 3. WAQA BLAKE 4. WES NAIQAMA 5. DALLIN WATENE-ZELEZNIAK 6. TOM HUMBLE 7. LUKE CAPEWELL 8. SAM ANDERSON 9. KEVIN KINGSTON (C) 10. TIM GRANT 11. VAIPUNA TIA KILIFI 12. MATT ROBINSON 13. RYAN SIMPKINS 14. REAGAN CAMPBELL-GILLARD 15. KIERRAN MOSELEY 16. ANTHONY CHERRINGTON 17. TOM EISENHUTH 18. LIAM AYOUB
到此:
1. Will Smith
2. Eto Nabuli
3. Waqa Blake
4. Wes Naiqama
5. Dallin Watene-Zelezniak
6. Tom Humble
7. Luke Capewell
8. Sam Anderson
9. Kevin Kingston
10. Tim Grant
11. Vaipuna Tia Kilifi
12. Matt Robinson
13. Ryan Simpkins
14. Reagan Campbell-Gillard
15. Kierran Moseley
16. Anthony Cherrington
17. Tom Eisenhuth
18. Liam Ayoub
我几乎设法让这个工作,但坚持试图将连字符(即坎贝尔 - 吉拉德)之后的字母大写并用两个姓氏处理姓名(即“Tai Kilifi”)。目前我的尝试打破了三个字的名称,连字符后面的字母没有得到大写。
这是我的PHP代码,它从一个简单的html输入字段发布字符串。我的代码现在接受字符串,删除(C),搜索数字和名称并将它们放入数组中。然后格式正确。 我可能会以过于复杂的方式这样做,所以欢迎任何帮助。
$string = $_POST['teamInput'];
$stringTeamFix = str_replace("(C)", "", "$string");
//Handles removing (C)/captain from string
preg_match_all("/\d+|[a-z'-]+/i", $stringTeamFix, $result);
if(preg_match_all('/\d+/', $stringTeamFix, $numbers)){
$lastnum = end($numbers[0]);
}
$resultCount = count ($result[0]);
echo "<br/><br/>";
for ($a=0, $b=1, $c=2, $i=1; $i<$lastnum+1; $i++){
$firstName = $result[0][$b];
$surName = $result[0][$c];
$firstLower = strtolower($firstName);
$firstFix = ucfirst($firstLower);
$surnameLower = strtolower($surName);
$surnameFix = ucfirst($surnameLower);
echo $result[0][$a].". ".$firstFix." ".$surnameFix."<br/>";
$a+=3;
$b+=3;
$c+=3;
}
echo "<br/><br/>";
答案 0 :(得分:0)
零宽度替换
这样做:
$replaced = ucwords(preg_replace('~(?<!^)(?=\d)\b~', '\r\n', $yourstring));
正则表达式找到数字前面的位置(第一个除外),并插入换行符。
(?<!^)
断言前面的内容不是字符串的开头(?=\d)
断言接下来是数字\b
断言当前位置是单词字符(数字,字母或下划线)和非单词字符之间的边界