Myślę, że chcesz coś takiego, napisany z flagą /x
dodawania komentarzy i nieznaczących spacji:
/
\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
Jeśli chcesz go bez fantazyjny formatowania, po prostu usuń spacje i komentarze:
/\b([A-Z][a-z]*){2,}\b/
Jak wskazuje j_random_hacker, jest to trochę proste, ponieważ pasuje do słowa, które jest po prostu kolejnymi dużymi literami. Jego rozwiązanie, które mam rozszerzony o /x
pokazać jakiś szczegół, zapewnia co najmniej jedną małą literę:
/
\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
Jeśli chcesz go bez formatowania ozdobnym, po prostu usuń spacje i komentarze:
/\b[A-Z][a-zA-Z]*(?:[a-z][a-zA-Z]*[A-Z]|[A-Z][a-zA-Z]*[a-z])[a-zA-Z]*\b/
Wyjaśniam wszystkie te funkcje w Learning Perl.
Czy jedno słowo pisane wielkimi literami (takie jak Perl lub Boing) nie jest również poprawnym słowem CamelCase?W takim przypadku kwantyfikator powinien wynosić {1,} lub po prostu + –
@Barry: W wielu przypadkach spowodowałoby to więcej problemów niż ich rozwiązanie. Lubię wersje Briansa. @Brian: Co oznacza flaga/x, którego nie używasz w swoim ostatnim poleceniu? –
Perl lub Boing nie są wielbłądowe, ponieważ nie są wyrazami złożonymi. –