正则表达式匹配所有大写字母之前的内容

3
我从这个问题中找到了以下代码,正则表达式匹配直到找到2个大写字母吗?
^.*(?=\b(?:[^\sA-Z]*[A-Z]){2})

然而我的问题与 OP 稍有不同。

我想要匹配以下字符串中所有大写字母之前的内容,规则是匹配直到负向先行断言发现 2 个大写字符,然后从第一个大写字符开始匹配到第二个大写字符开始之间的所有内容。

所以,我希望能够得到以下结果(继续自 OP 的示例):

Http is an HttpHeader

目的是获得Http是一个Http

而不是OP在发布帖子中得到的Http是一个


2
你能澄清一下你的规则吗?你的例子与描述不符,因为匹配到大写字母之前的所有内容都将返回空值,因为第一个大写字母是第一个字符。 - psubsee2003
同意@psubsee2003的观点--你想要的结果包含两个大写字符! - Explosion Pills
可能是RegEx to split camelCase or TitleCase (advanced)的重复问题。 - mvp
@mvp并没有像预期的那样工作,请参见http://regex101.com/r/bO7aP8 - user1973125
使用 (?<! )(?=[A-Z]) - hwnd
4个回答

0

对我来说似乎过于复杂了

preg_match( '/[^A-Z]+/', $str, $res );

0
preg_match('/[^A-Z]*([A-Z]{1}[^A-Z]*[A-Z]{1}[^A-Z]*)/', $str, $res);

0
([A-Z].*?\w+(?=[A-Z]))

您可以按照上面的正则表达式进行操作。这非常简单而且快速。在此处查看匹配的组:实时演示


0

使用这个模式 ^.*?(?=\b(?:[^\sA-Z]*[A-Z]){2}).+?(?=[A-Z]) 演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接