PHP正则表达式匹配所有大写字母的单词或单词组


PHP Regex match word or group of words in all capital letters

如何使用regex匹配所有大写字母的单词或单词组?

我相信我已经解决了问题的一半,尽管这可能不是正确的方法。

我试着用大写字母捕捉一个单词,或者两个或三个——基本上,如果它们是连续出现的,我希望它们作为一个组来捕捉,而不是每个单词本身。

例如:
"HAPPY BIRTHDAY TOMMY"不会匹配并返回[0] -> HAPPY, [1] -> BIRTHDAY, [2] -> TOMMY,而是整个组,例如[0] -> HAPPY BIRTHDAY TOMMY

我下面使用的代码将"HAPPY BIRTHDAY"匹配在一起,或者只是"TOMMY",但不是所有内容都匹配在一起。

[A-Z]{1,}'s[A-Z]{1,}|'b[A-Z]{1,}'b

您可以使用正则表达式:

(?=[A-Z])([A-Z's]+)

我确信我完全理解你需要什么,但是为了分组,你必须使用括号()。试试这个:

([A-Z]+)'b([A-Z]+)'b([A-Z]+)'b

这应该捕获三个连续的全大写单词

如果我理解正确的话,这应该能达到/([A-Z]'s?)+/的目的。这应该捕获像HAPPY BIRTHDAY TOMMY作为一个集合和HAPPY BIRTHDAY TOMMY BOY作为两个集合('HAPPY BIRTHDAY'和'BOY')这样的序列。

这个呢

$str = "My test sentence HAPPY BIRTHDAY TOMMY this is lower case an UPPERCASE more lowercase";
if (preg_match_all('/''b(?=[A-Z])[A-Z ]+(?=''W)/',$str,$match)) {                      
    var_dump($match[0]);
}
结果

array(2) {[0]=> string(20)" TOMMY生日快乐" 1=> string(9)"大写"}

在末尾使用提前查找确保末尾不包含空格,因为如果使用了单词边界并且后面有另一个单词,则会发生这种情况。

查看Regexr