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

时间:2011-11-10 07:57:35

标签: php 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

4 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

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

See it

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

如果我理解正确的话,这应该可以做到/([A-Z]\s?)+/。这应该像HAPPY BIRTHDAY TOMMY一样捕捉序列,将生日快乐的tommy BOY作为两组('生日快乐'和'男孩')。

答案 3 :(得分:1)

这个怎么样?

$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)“HAPPY BIRTHDAY TOMMY”1 => string(9)“UPPERCASE”}

最后使用前瞻确保最后没有包含空格,因为如果使用单词边界并且后面有另一个单词会发生这种情况。

here on Regexr