Penso che si desidera qualcosa di simile, scritto con la bandiera /x
per aggiungere commenti e spazi insignificanti:
/
\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
Se si desidera senza la formattazione di fantasia, è sufficiente rimuovere lo spazio bianco e commenti:
/\b([A-Z][a-z]*){2,}\b/
Come fa notare j_random_hacker, questo è un po 'semplice poiché corrisponderà a una parola che è solo lettere maiuscole consecutive. La sua soluzione, che ho ampliato con /x
per mostrare qualche dettaglio, assicura almeno una lettera minuscola:
/
\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
Se si desidera senza la formattazione di fantasia, basta rimuovere lo spazio bianco e commenti:
/\b[A-Z][a-zA-Z]*(?:[a-z][a-zA-Z]*[A-Z]|[A-Z][a-zA-Z]*[a-z])[a-zA-Z]*\b/
Spiego tutte queste funzioni in Learning Perl.
fonte
2009-05-02 23:05:47
Non è una singola parola in maiuscolo (come Perl o Boing) anche una parola CamelCase valida?In tal caso, il quantificatore dovrebbe essere {1,} o semplicemente + –
@Barry: In molti casi, causerebbe più problemi che risolverli. Mi piacciono le versioni di Brians. @ Brian: Cosa significa il flag/x che non usi nel tuo ultimo comando? –
Perl o Boing non sono cammellati perché non sono parole composte. –