REGEX用于检测句点和大写字母是否正确用空格分隔

时间:2018-07-23 16:03:30

标签: php regex

考虑这句话:

  

关于LASER应用的这句话到此结束。   句子应该以空格开头。这一个很好。这不是。

我希望使用preg_replace正确地分隔两个错误的位置“ here.Naturally”和“ fine.This”的句号和大写字母。

其他所有内容都应保持不变。

我得到的最接近的是我雇用的(?<!\ )[A-Z]

$this_desc = preg_replace('/(?<!\ )[A-Z]/', ' $0', $this_desc);

...但是它也匹配首字母和首字母缩写“ LASER”中的大写... regexr.com/3ss3o

1 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式进行环视搜索:

/(?<!\h)\.(?=[A-Z])/

或使其能够识别Unicode大写字母,请使用:

/(?<!\h)\.(?=\p{Lu})/

RegEx Demo

代码:

$this_desc = preg_replace('/(?<!\h)\.(?=[A-Z])/', '$0 ', $this_desc);

RegEx详细信息:

  • (?<!\h):在背后断言我们在先前位置没有水平空间
  • \.:匹配一个点
  • (?=[A-Z]):先行断言我们前面有一个大写字母