>我有一个情况.我需要一些正则表达式来检查是否有两个以上的大写字符退出。让我们看一下示例
Input = "HelloTest"
Output = "H ello T est"
Input = "HelloTHISisTest";
output = "H ello THIS is T est"
逻辑是每当我找到一个大写字母时,我都会试图打破单词。 但是如果两个以上的大写字母将处于连续形式,则它不会中断。
规则是如果的话不会断,如果
- 它们将有两个以上的连续大写字符,
它们是连续的小写字符
有什么帮助吗?
$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