【发布时间】:2016-04-23 16:30:24
【问题描述】:
我的代码有效。但是我希望它返回下面的结果。
John Doe L.R.T.
相反,它会返回(只有在找到 2 个或更多点时才会这样做。) John Doe L.. r T.
$string = "John Doe l. r t";
$string = preg_replace_callback('/\b\s[A-z]{1}\b/', function ($matches) {
return strtoupper($matches[0]);
}, $string);
echo preg_replace('/\b\s[A-z]{1}\b/', '$0.', $string);
【问题讨论】:
-
好吧,看起来你想在大写字母后面加上一个
.,后面有一个空格,对吧?如果你能说出你想要的确切结果,那就太好了。否则,看起来你想要的答案应该吐出来:J.o.h.n. .D.o.e. .l... .r. .t. -
想要的结果是 John Doe L. R. T.
-
如果您不需要检查第一个边界,也可以尝试
preg_replace_callback('/(?<=\s)([A-Za-z])(?:\.|\b)/', function ($matches) { return strtoupper($matches[1] . ".");并删除第二个替换。 See demo at eval.in。进一步注意,[A-z]matches more than [a-zA-Z] 但这不是实际问题。
标签: php regex preg-replace preg-match str-replace