我需要一个正则表达式,它只能从字符串中提取以大写字母开头的单词,或者所有字母都是大写的,例如
$string= "Hola Mundo como Estas HOY"
从这个文本我需要
Hola, Mundo, Estas, HOY
另一件事是,我只想显示第一个单词,前提是该示例中的第一个单词是 Hola wont go。我第一次有这个
^[A-Z]+$
必须以大写开头,以大写结尾,但我怎样才能添加更多模式?
我需要一个正则表达式,它只能从字符串中提取以大写字母开头的单词,或者所有字母都是大写的,例如
$string= "Hola Mundo como Estas HOY"
从这个文本我需要
Hola, Mundo, Estas, HOY
另一件事是,我只想显示第一个单词,前提是该示例中的第一个单词是 Hola wont go。我第一次有这个
^[A-Z]+$
必须以大写开头,以大写结尾,但我怎样才能添加更多模式?
([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
试试这个模式
\b(?:\p{Lu}+|(?<!^)\p{Lu}\p{Ll}+)\b
\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