Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式-拾取以大写字母开头的连续单词_Php_Regex - Fatal编程技术网

Php 正则表达式-拾取以大写字母开头的连续单词

Php 正则表达式-拾取以大写字母开头的连续单词,php,regex,Php,Regex,我必须在文本中提取连续的大写字母起始词(使用PHPpreg_match()) 所以在这段文字中-“这是一些文字”应该用“一些”这个词,但在这段文字中-“这是另一段文字”应该用“另一段” 我现在有一个表达式-([A-Z][A-Z]+)+,但它只提取每个大写字母。我需要将它们作为一整行(例如-[0]=>“另一块”,但我目前得到了“”的[0]=>“另一块”、[1]=>“一块”、[2]=>) 我应该如何更新它以使其满足我的需要?您可以使用以下方法: if (preg_match('~[A-Z][a-z]

我必须在文本中提取连续的大写字母起始词(使用PHP
preg_match()

所以在这段文字中-“这是一些文字”应该用“一些”这个词,但在这段文字中-“这是另一段文字”应该用“另一段”

我现在有一个表达式-
([A-Z][A-Z]+)+
,但它只提取每个大写字母。我需要将它们作为一整行(例如-
[0]=>“另一块”
,但我目前得到了“”的
[0]=>“另一块”、[1]=>“一块”、[2]=>)

我应该如何更新它以使其满足我的需要?

您可以使用以下方法:

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];
}

看起来不像正则表达式的任务。一旦找到它们,预期的结果是什么?