【问题标题】:How can I match characters in a string and palce a dot after each Letter using preg replace如何匹配字符串中的字符并使用 preg_replace 在每个字母后放置一个点
【发布时间】: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


【解决方案1】:

我对你的代码做了一些修改。

试试这个代码:-

$string = "John Doe l. r t";

$string = preg_replace_callback('/\b\s[A-z]{1}\b/', function ($matches) {
 return strtoupper($matches[0]);
}, str_replace('.', '', $string));

echo preg_replace('/\b\s[A-z]{1}\b/', '$0.', $string);

【讨论】:

    【解决方案2】:

    尝试匹配被空格包围的字母,或者在文本的开头和结尾处由空格包围:

    echo preg_replace("/\s([a-zA-Z])\s|$/", "$1.", $input_lines);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多