我必须在文本中挑选连续的大写字母开头的单词(使用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];
}