php 正则提取连续字母,关于正则表达式:检查是否存在两个连续的大写字母php...

我有一个情况。 我需要一些正则表达式,它将检查是否存在两个以上大写字符。 让我们看一个例子

Input  ="HelloTest"

Output ="H ello T est"

Input  ="HelloTHISisTest";

output ="H ello THIS is T est"

逻辑是每当我发现一个大写字母时我都试图打断单词。 但是,如果两个以上的大写字母采用连续形式,则不会中断。

规则是

话不会破

他们将有两个以上的连续大写字符,

它们是连续的小写字符

有什么帮助吗?

这种逻辑似乎有点不明智。 AmISure呢? 是Am I Sure还是Am IS ure? 您如何区分这两个? 还是AmISure? 那不该闯入Am Isure吗?

对于AmISure,它将是Am ure,而AmIsure将是我

那为什么不是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。

regex101演示

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

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

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

并替换为空格。

regex101演示

谢谢你的时间 。 答对了

@Creator是的...自从您编辑问题以来,一切都一无所有...

哦是的!!! 感谢@deceze进行通知。 头脑已经写好了。 但是,怎么说男人! XMS快活。

@Creator我认为您只需要澄清原始问题的规则即可。 如果用户批评您的逻辑,请不要屈服。 可以肯定地说,如果1.连续的大写字母,2。连续的小写字母,3。如果前两个字符失败,则第一个字符是大写字母,其余的是小写字母,则应该将连续字符保持在一起。

是的。 我之前没有更好地解释它。 ANyway已更新。 因为你有我的逻辑。 谢谢

@Creator好,现在您的示例输出与逻辑语句不匹配...第一个输出应为"Hello Test",第二个输出应为"Hello THIS is Test"

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

试试这个,看演示,用space代替

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

您可以匹配:

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

并替换为:

"\1"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值