Я думаю, что вы хотите что-то вроде этого, написанное с флагом /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/
Я объясняю все эти функции в Изучение Perl .