正则表达式——挑选以大写字母开头的连续单词


Regular expressions - pick up consecutive words that start with a capital letter

我必须在文本中挑选连续的大写字母开头的单词(使用PHP preg_match())。

所以在这个文本- "this is Some text"中,它应该挑选单词"Some",但是在这个文本- "this is Another Piece Of text"中,它应该挑选单词"Another Piece Of"。

我目前有这个表达式- ([A-Z][a-z]+)+,但它只拾取每个大写的单词。我需要它们作为一个整体(例如- [0] => "Another Piece Of",但我目前得到[0] => "Another", [1] => "Piece", [2] => "Of")

我应该如何更新它,使它做我需要的?

你可以这样做:

if (preg_match('~[A-Z][a-z]*(?> [A-Z][a-z]*)*~', $text, $m)) {
    echo $m[0];
}

(?> [A-Z][a-z]*)*表示可选的其他单词。

为了更灵活,您可以将其更改为(?>'s+[A-Z][a-z]*)*

注意:如果需要处理重音单词,可以使用'p{Ll}'p{Lu}字符类:

if (preg_match('~'p{Lu}'p{Ll}*(?>'s+'p{Lu}'p{Ll}*)*~', $text, $m)) {
    echo $m[0];
}