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


Check if two continous Uppercase letter exists php

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

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

逻辑是每当我找到一个大写字母时,我都会试图打破单词。 但是如果两个以上的大写字母将处于连续形式,则它不会中断。

规则是如果的话不会断,如果

  1. 它们将有两个以上的连续大写字符,
  2. 它们是连续的小写字符

    有什么帮助吗?

$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

您可以使用以下内容:

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

并替换为$0 .

正则表达式101演示

正则表达式首先尝试匹配任何连续的大写字符或小写字符,最后尝试匹配单个大写字母,后跟至少 1 个小写字符,所有 3 个字符都没有回溯,最后有一个负前瞻以防止匹配最后一个"单词"(因此不会添加额外的空格)。


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

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

并替换为空格。

正则表达式101演示

您可以匹配:

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

并替换为:

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

试试这个。请参阅演示。替换为space

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