我想你想这样的事情,与/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