Utf8 corretta regex per CamelCase (WikiWord) in perl
-
27-10-2019 - |
Domanda
Qui c'era una domanda sul CamelCase regex . Con la combinazione di tchrist posta Mi chiedo quale sia il corretto utf-8 CamelCase .
A partire da espressioni regolari (brian d foy di):
/
\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
e modificando a:
/
\b # start at word boundary
\p{Uppercase_Letter} # start with upper
\p{Alphabetic}* # followed by any alpha
(?: # non-capturing grouping for alternation precedence
\p{Lowercase_Letter}[a-zA-Z]*\p{Uppercase_Letter} ### next bit is lower, any zero or more, ending with upper
| # or
\p{Uppercase_Letter}[a-zA-Z]*\p{Lowercase_Letter} ### next bit is upper, any zero or more, ending with lower
)
\p{Alphabetic}* # anything that's left
\b # end at word
/x
Hai un problema con le linee marcate '###'.
Inoltre, come modificare il regolare quando assumendo che i numeri e la sottolineatura sono equivalenti alle lettere minuscole, quindi W2X3 è una parola CamelCase valido.
Aggiornamento: (ysth commento)
per il prossimo,
-
any
: media "maiuscola o minuscola o numero o di sottolineatura"
La regex dovrebbe corrispondere CamelWord, CAW
- iniziare con la lettera maiuscola
- opzionale qualsiasi
- lettera minuscola o un numero o di sottolineatura
- opzionale qualsiasi
- lettera maiuscola
- opzionale qualsiasi
Per favore, non contrassegnare come duplicato, perché non è. Il domanda originale (e le risposte troppo) pensavano solo ascii.
Soluzione
Io davvero non può dire quello che stai cercando di fare, ma questo dovrebbe essere più vicino a ciò che il vostro intento originale sembra essere stato. Io ancora non posso dire quello che vuoi dire a che fare con esso, però.
m{
\b
\p{Upper} # start with uppercase code point (NOT LETTER)
\w* # optional ident chars
# note that upper and lower are not related to letters
(?: \p{Lower} \w* \p{Upper}
| \p{Upper} \w* \p{Lower}
)
\w*
\b
}x
uso Mai [a-z]
. E infatti, non utilizzare \p{Lowercase_Letter}
o \p{Ll}
, dal momento che quelle non sono la stessa della \p{Lowercase}
più desiderabile e più corretta e \p{Lower}
.
E ricorda che \w
è in realtà solo un alias per
[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Letter_Number}\p{Connector_Punctuation}]