/ / PHP - Regex per più di una lettera maiuscola? - php, regex, preg-match

PHP - Regex per più di una lettera maiuscola? - php, regex, preg-match

Sto cercando di scrivere uno script PHP che trovi tuttoparole in un elenco o in un paragrafo che hanno più di una lettera maiuscola o una combinazione di almeno 1 lettera e 1 numero. Posso trovare una lettera maiuscola, ma 2 lettere maiuscole in una parola sono un problema.

Grazie

risposte:

0 per risposta № 1

Spero di aver capito bene la tua domanda. Queste espressioni regolari corrispondono a tutte le parole che contengono almeno 2 lettere maiuscole o che contengono almeno 1 lettera + 1 numero (ad es. HEllo, HellO, Hello1, hello2, eccetera). Utilizza lo spazio come separatore, quindi potrebbe non riuscire con la punteggiatura, tra cui virgole, punti e altre cose nelle partite.

$text = "Text";
preg_match_all("#(?<= )([^ ]*p{Lu}[^ ]*p{Lu}[^ ]*(?= )|[^ ]*p{L}[^ ]*p{N}[^ ]*|[^ ]*p{N}[^ ]*p{L}[^ ]*)(?= )#u", $text, $matches);
print_r($matches[0]);

(Spiegazione: corrisponde a ogni parola preceduta e seguita da uno spazio (ma non includerli nella corrispondenza), che ha qualcosa che non è uno spazio ripetuto 0, 1 o più volte, una lettera maiuscola, di nuovo un non-spazio ripetuto 0, 1 o più volte, ancora una lettera maiuscola e ancora qualcosa che "è un non-spazio, o lo stesso ma al posto delle lettere maiuscole hai una lettera e un numero, o un numero e una lettera)

Per poterlo utilizzare è necessario PHP > 5.1.0. Il vantaggio è che corrisponde a tutticaratteri unicode considerati lettere o numeri, non solo ASCII. Se non ti serve o hai una versione minore di PHP, puoi usare la versione ASCII:

$text = "Text";
preg_match_all("#(?<= )([^ ]*[A-Z][^ ]*[A-Z][^ ]*(?= )|[^ ]*[A-Za-z][^ ]*[0-9][^ ]*|[^ ]*[0-9][^ ]*[A-Za-z][^ ]*)(?= )#", $text, $matches);
print_r($matches[0]);

0 per risposta № 2

non testato, ma nella giusta direzione generale:

[a-z]*[A-Z]+[a-z]*[A-Z]+[a-z]*s

In altre parole, potrebbe iniziare con uno o piùlettere minuscole, ha una lettera maiuscola, forse un'altra o più lettere minuscole, quindi ha un'altra lettera maiuscola e può avere lettere minuscole prima di trovare uno spazio. Potrebbe essere necessario aggiungere punteggiatura ecc. A seconda del caso d'uso.