我正在尝试编写一个PHP脚本,用于查找列表中的所有单词或具有多个大写字母的段落 - 或者至少包含1个字母和1个数字的混合。我可以找到一个大写字母,但一个单词中有2个大写字母是个问题。
谢谢
答案 0 :(得分:0)
未经测试,但在正确的方向:
[a-z]*[A-Z]+[a-z]*[A-Z]+[a-z]*\s
换句话说,它可以以一个或多个小写字母开头,有一个大写字母,可能是另一个或多个小写字母,然后有另一个大写字母,并且在找到空格之前可能有小写字母。您可能需要添加标点符号等,具体取决于您的用例。
答案 1 :(得分:0)
我希望我的问题是正确的。这些正则表达式匹配所有至少包含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]);