0

我需要一个正则表达式,它只能从字符串中提取以大写字母开头的单词,或者所有字母都是大写的,例如

$string= "Hola Mundo como Estas HOY"

从这个文本我需要

Hola, Mundo, Estas, HOY

另一件事是,我只想显示第一个单词,前提是该示例中的第一个单词是 Hola wont go。我第一次有这个

^[A-Z]+$

必须以大写开头,以大写结尾,但我怎样才能添加更多模式?

4

2 回答 2

1
([A-Z]{1}[a-zA-Z]+)

在 PHP 中:

<?php 
$string = "Hola Mundo como Estas HOY";
$pattern = "/([A-Z]{1}[a-zA-Z]+)/";
preg_match_all($pattern, $string, $matches);
echo "<pre>";
print_r($matches[0]);
echo "</pre>";
 ?>

这将转储一系列匹配项:

Array
(
    [0] => Hola
    [1] => Mundo
    [2] => Estas
    [3] => HOY
)

要将其作为逗号分隔的字符串,您可以执行以下操作:

echo implode(",", $matches[0]);

返回:

Hola,Mundo,Estas,HOY
于 2013-03-19T19:56:41.967 回答
1

试试这个模式

\b(?:\p{Lu}+|(?<!^)\p{Lu}\p{Ll}+)\b

在 Regexr 上查看

\b匹配单词边界

\p{Lu}是一个 Unicode 代码属性,匹配所有语言中的大写字母

\p{Ll}是一个 Unicode 代码属性,匹配所有语言中的小写字母

(\p{Lu}+|(?<!^)\p{Lu}\p{Ll}+)是一个交替,匹配\p{Lu}+\p{Lu}\p{Ll}+

(?<!^)是后向断言,确保\p{Lu}\p{Ll}+仅匹配,如果它不在字符串的开头

如果你在 php 中使用它,你必须设置修饰符u

于 2013-03-19T20:01:54.043 回答