检查两个连续的大写字母是否存在php

时间:2014-12-24 12:31:59

标签: php regex

我有一个情况。我需要一些正则表达式来检查是否有两个以上的大写字符退出。让我们来看看例子

 Input  = "HelloTest"
 Output = "H ello T est" 

 Input  = "HelloTHISisTest";
 output = "H ello THIS is T est" 

逻辑是我试图在找到大写字母时打破单词。但如果两个以上的大写字母连续不断,则不会破坏。

规则是 如果

,话语不会破坏
  1. 他们将有两个以上连续的大写字符,
  2. 它们是连续的小写字符

    有任何帮助吗?

4 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

(?:[A-Z]{2,}+|[a-z]{2,}+|[A-Z][a-z]++)(?!$)

并替换为$0

regex101 demo

正则表达式首先尝试匹配任何连续的大写字符或小写字符,并且最后尝试匹配单个大写字母后跟至少1个小写字符,所有3个字符串都没有回溯并且末尾有一个负向前导以防止匹配最后一句话' (因此不会添加额外的空间)。


对于已编辑的问题,您可以使用以下内容获取新输出:

(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[a-z])

用空格替换。

regex101 demo

答案 1 :(得分:1)

$input = "HelloTHISisTest";
$output = preg_replace('/([A-Z]+)/', ' \1 ', $input);
$output = trim($output);
var_dump($output);

# output will be:
# string(20) "H ello THIS is T est"

参见在线小提琴http://ideone.com/OaQz3N

答案 2 :(得分:0)

你可以匹配:

"([A-Z])(?=[A-Z])"

并替换为:

"\1 "

答案 3 :(得分:0)

(?<=[A-Z])(?=[a-z])|(?<![A-Z])(?=[A-Z])

试试这个。参见demo。替换space

https://regex101.com/r/gQ3kS4/36