2012-02-09 51 views
-2

我正在尝试编写一个PHP脚本,用于查找列表或段落中包含多个大写字母的所有单词 - 或者至少包含1个字母和1个数字的组合。我可以找到一个大写字母,但是一个单词中的2个大写字母是一个问题。PHP - 一个以上大写字母的正则表达式?

谢谢

+3

请给出一个你如何尝试这样做的例子。 – deltree 2012-02-09 00:18:24

+0

[你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – webbiedave 2012-02-09 00:30:11

+0

不知道为什么这个问题被拒绝了两次......这不是重复的我以为我之前做过一次搜索。 – StackOverflowed 2012-02-09 02:11:27

回答

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]); 
0

未经测试,但在一般正确的方向:

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

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

相关问题