代码之家  ›  专栏  ›  技术社区  ›  mayersdesign

用于检测句点和大写字母的regex由空格正确分隔

  •  1
  • mayersdesign  · 技术社区  · 6 年前

    考虑这句话:

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

    我希望使用preg_replace来正确区分不正确的两个句号和大写字母“here.naturally”和“fine.this”。

    其他一切都应该保持原样。

    我最近得到的是 (?<!\ )[A-Z] 我的工作是:

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

    …但它也符合首字母大写和首字母缩写“laser”中的大写… regexr.com/3ss3o

    1 回复  |  直到 6 年前
        1
  •  2
  •   anubhava    6 年前

    您可以使用此regex进行查找:

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

    或者,要使其识别Unicode大写字母,请使用:

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

    RegEx Demo

    代码:

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

    Regex详细信息:

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