我想你想這樣的事情,與/x
標誌寫入添加註釋和無關緊要的空白:如果你想讓它沒有花俏的格式
/
\b # word boundary so you don't start in the middle of a word
( # open grouping
[A-Z] # initial uppercase
[a-z]* # any number of lowercase letters
) # end grouping
{2,} # quantifier: at least 2 instances, unbounded max
\b # word boundary
/x
,只是刪除空格和註釋:
/\b([A-Z][a-z]*){2,}\b/
正如j_random_hacker指出的那樣,這有點簡單,因爲它會匹配一個連續的大寫字母。他的解決方案,我已經與/x
展開,以顯示一些細節,確保至少一個小寫字母:
/
\b # start at word boundary
[A-Z] # start with upper
[a-zA-Z]* # followed by any alpha
(?: # non-capturing grouping for alternation precedence
[a-z][a-zA-Z]*[A-Z] # next bit is lower, any zero or more, ending with upper
| # or
[A-Z][a-zA-Z]*[a-z] # next bit is upper, any zero or more, ending with lower
)
[a-zA-Z]* # anything that's left
\b # end at word
/x
如果你想它沒有花俏的格式,只是刪除空格和註釋:
/\b[A-Z][a-zA-Z]*(?:[a-z][a-zA-Z]*[A-Z]|[A-Z][a-zA-Z]*[a-z])[a-zA-Z]*\b/
我在Learning Perl中解釋了所有這些功能。
是不是一個大寫單詞(如Perl或Boing)也是一個有效的CamelCase單詞?在這種情況下,量詞應該是{1,}或簡單地+ – 2009-05-02 23:16:53
@Barry:在許多情況下,它會導致更多的問題而不是解決它們。我喜歡Brians的版本。 @布萊恩:你的上一個命令中沒有使用的flag/x是什麼意思? – 2009-05-03 00:08:29
Perl或Boing不是駱駝式的,因爲它們不是複合詞。 – 2009-05-03 00:27:11