2012-02-09 53 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 

換句話說,它可以用一個啓動或多個小寫字母,有一個大寫字母,也許另外一個或更多的小寫字母,然後有另一個大寫字母,並且在找到空格之前可能有小寫字母。根據您的使用情況,您可能需要添加標點符號等。

相關問題