È possibile utilizzare lookaheads zero-width. I lookheadhead sono ottimi per eliminare le possibilità di abbinamento se non soddisfano determinati criteri.
Per esempio, usiamo le parole
untie queue unique block unity
Inizia con un fiammifero la parola di base:
\b\w+\b
di richiedere la parola abbinato \w+
inizia con un
, potremmo usare un positiva lookahead
\b(?=un)\w+\b
cosa dice questo è
\b
Partita un vuoto
(?=un)
Ci sono le lettere "UN"? In caso contrario, NO MATCH. Se è così, allora la possibile corrispondenza.
\w+
Uno o più caratteri alfanumerici
\b
Incontro un vuoto
Un lookahead positivo elimina una possibilità incontro se non soddisfa l'espressione contenuta. Si applica alla regex DESTRO dopo. Quindi lo (?=un)
si applica all'espressione \w+
precedente e richiede che COMINCIA CON . In caso contrario, l'espressione \w+
non corrisponderà.
Che tipo di abbinamento di parole che non inizi con un
? Basta usare un "lookahead negativo"
\b(?!un)\w+\b
\b
Partita un vuoto
(?!un)
vi sono le lettere "UN"? Se SO, NESSUNA PARTITA. In caso contrario, quindi possibile corrispondenza.
\w+
uno o più word caratteri
\b
Incontro un vuoto
Quindi per la vostra esigenza di avere almeno 1 A, 1 B e 1 C della stringa, un modello come
(?=.*A)(?=.*B)(?=.*C).+
funziona perché dice:
(?=.*A)
- Fa i t hanno .*
qualsiasi carattere seguito da A? Se è così, è possibile una corrispondenza se non c'è una corrispondenza.
(?=.*B)
- Ha .*
qualsiasi carattere seguito da B? Se è così, è possibile una corrispondenza se non c'è una corrispondenza.
(?=.*C)
- Ha .*
qualsiasi carattere seguito da C? Se è così, è possibile una corrispondenza se non c'è una corrispondenza.
.+
Se i requisiti di lookahead di cui sopra sono stati soddisfatti, corrisponde a qualsiasi carattere. In caso contrario, non corrispondono caratteri (e quindi non c'è corrispondenza)
C'è un motivo per cui è necessario Regex? Ed è sempre solo un set di 3 personaggi? – user7116
Sto cercando di imparare come usare espressioni regolari. Per imparare Uno deve impostare compiti per se stesso. Grazie per aver trovato il tempo di rispondere :) –
Potresti provare un altro problema per l'apprendimento della regex. Mentre è possibile risolvere questo, come ha mostrato Jerry, non è un problema particolarmente buono per un'espressione regolare (molte librerie di stringhe offrono persino un metodo 'ContainsAll'). – ssube