如何在符合条件的大写字母后插入句点?

时间:2017-06-09 22:11:13

标签: php regex preg-replace

如何根据以下规则在任何大写单字母后面插入一段时间,该单字母后面没有大写字母:

  1. 接下来是一个空间;或
  2. 接下来是另一个大写字母;或
  3. 它是字符串中的最后一个字母,后面是空格或大写字母
  4. 示例输入/输出:

    Patrick TJ Stephens变为Patrick T.J. Stephens
    TJ Stephens成为T.J. Stephens
    TJ Stephens QC成为T.J. Stephens Q.C.
    Marissa C J Gilbert成为Marissa C. J. Gilbert
    Marissa C Gilbert成为Marissa C. Gilbert
    C Marissa Gilbert成为C. Marissa Gilbert
    Marissa Gilbert C变为Marissa Gilbert C.

    我一直在使用:

    $str = preg_replace( '/([A-Z])(?=\s|$)/', '\1.', $str );
    

    不幸的是,它将Patrick TJ Stephens变为Patrick TJ. Stephens而不是Patrick T.J. Stephens

3 个答案:

答案 0 :(得分:0)

您可以使用:

$str = preg_replace('/[A-Z](?![a-z.])\K/', '.', $str);

不确定它是否遵循您的规则,但它确实起作用。

或与此一起:[A-Z](?![^A-Z\s])\K

答案 1 :(得分:0)

翻译您的所有要求将需要前瞻和后视这个正则表达式:

$str = preg_replace('/(?<=[\hA-Z])[A-Z]$|[A-Z](?=[\hA-Z])/m', '$0.', $str);

RegEx Demo

虽然这个正则表达式比Casimir's simpler regex

更复杂

答案 2 :(得分:0)

还有一个假人的版本,假我:)

if (typeof(jQuery) == "undefined") {
    window.jQuery = function(selector) {
        return window.opener.jQuery(selector, document);
    };
    jQuery = window.opener.$.extend(jQuery, window.opener.$);
    window.$ = jQuery;
    var msg = "Created with jQuery!";
    $("body").append('<button onclick="alert(msg)">Text</button>');
}

这是demo