PHP-多个大写字母的Regex


PHP - Regex for more than one capital letter?

我正在尝试编写一个PHP脚本,该脚本可以查找列表或段落中所有包含多个大写字母的单词,或者至少包含1个字母和1个数字的单词。我能找到一个大写字母,但一个单词中有两个大写字母是个问题。

感谢

我希望我答对了你的问题。这些正则表达式匹配其中至少有2个大写字母或至少有1个字母+1个数字的所有单词(例如HEllo、HEllo、Hello1、hello2等)。它使用空格作为分隔符,因此可能会因标点符号而失败,包括逗号、点和匹配中的其他内容。

$text = 'Text';
preg_match_all('#(?<= )([^ ]*'p{Lu}[^ ]*'p{Lu}[^ ]*(?= )|[^ ]*'p{L}[^ ]*'p{N}[^ ]*|[^ ]*'p{N}[^ ]*'p{L}[^ ]*)(?= )#u', $text, $matches);
print_r($matches[0]);

(解释:它匹配每个前后都有空格的单词(但不要将它们包括在匹配中),它有一个不是空格重复0、1或更多次的东西,一个大写字母,一个非空格重复0,1或更多次数,一个小写字母和一个非空间的东西,或者是相同的,但代替大写字母的是字母和数字,或数字和字母)

为了使用它,您需要PHP > 5.1.0。优点是它匹配所有被视为字母或数字的unicode字符,而不仅仅是ASCII。如果你不需要这个,或者有一个小版本的PHP,你可以使用ASCII版本:

$text = 'Text';
preg_match_all('#(?<= )([^ ]*[A-Z][^ ]*[A-Z][^ ]*(?= )|[^ ]*[A-Za-z][^ ]*[0-9][^ ]*|[^ ]*[0-9][^ ]*[A-Za-z][^ ]*)(?= )#', $text, $matches);
print_r($matches[0]);

未经测试,但方向大致正确:

[a-z]*[A-Z]+[a-z]*[A-Z]+[a-z]*'s

换句话说,它可以以一个或多个小写字母开头,有一个大写字母,可能还有一个或更多个小写字母,然后有另一个大写字符,在找到空格之前可能有小写字母。根据您的使用情况,您可能需要添加标点符号等。