如何在限定大写字母后插入句号?
How to insert period after qualifying capitalized letters?
如何根据以下规则在任何未跟大写字母的大写单个字母后插入句点:
- 后面跟着一个space;或者
- 后面又是一个大写字母;或者
- 它是字符串中的最后一个字母,前面是 space 或大写字母
样本Inputs/Outputs:
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|$)/', '.', $str );
不幸的是,它将 Patrick TJ Stephens
变成 Patrick TJ. Stephens
而不是 Patrick T.J. Stephens
。
您可以使用:
$str = preg_replace('/[A-Z](?![a-z.])\K/', '.', $str);
不确定它是否符合您的规则,但它确实起作用了。
或者这个:[A-Z](?![^A-Z\s])\K
翻译您的所有要求需要先行和后行,因为此正则表达式:
$str = preg_replace('/(?<=[\hA-Z])[A-Z]$|[A-Z](?=[\hA-Z])/m', '[=10=].', $str);
尽管这个正则表达式比
更复杂
还有一个傻瓜版,作者是傻瓜我:)
$str = preg_replace(
array(
'/([A-Z])(?=\s|$)/',
'/([A-Z])([A-Z])/'
),
array(
'.',
'.'
),
$str );
这是demo
如何根据以下规则在任何未跟大写字母的大写单个字母后插入句点:
- 后面跟着一个space;或者
- 后面又是一个大写字母;或者
- 它是字符串中的最后一个字母,前面是 space 或大写字母
样本Inputs/Outputs:
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|$)/', '.', $str );
不幸的是,它将 Patrick TJ Stephens
变成 Patrick TJ. Stephens
而不是 Patrick T.J. Stephens
。
您可以使用:
$str = preg_replace('/[A-Z](?![a-z.])\K/', '.', $str);
不确定它是否符合您的规则,但它确实起作用了。
或者这个:[A-Z](?![^A-Z\s])\K
翻译您的所有要求需要先行和后行,因为此正则表达式:
$str = preg_replace('/(?<=[\hA-Z])[A-Z]$|[A-Z](?=[\hA-Z])/m', '[=10=].', $str);
尽管这个正则表达式比
还有一个傻瓜版,作者是傻瓜我:)
$str = preg_replace(
array(
'/([A-Z])(?=\s|$)/',
'/([A-Z])([A-Z])/'
),
array(
'.',
'.'
),
$str );
这是demo