2011-01-18 17 views
7

Se voglio controllare tutte le parole che contengono la DEF sottostringa, questo sarebbe l'approccio giusto:Controllare se parola contiene stringa in Java Regex

^.*[D][E][F].*$ 

Inoltre v'è una regola facile quando negando espressioni regolari, vale a dire la modifica il sopra per identificare stringhe che non contengono DEF

EDIT: So che questo non richiede regex, ma per i miei scopi lo fa.

risposta

18

questo funziona troppo:

^.*DEF.*$ 

Esso controlla, se l'intera stringa contiene la stringa "DEF" almeno una volta. Ma per espressioni banali come questa:

str.contains("DEF"); 

fa lo stesso.

+0

cosa è il^e $ per –

+0

@LouisRhys, '^'e' $ 'rappresentano rispettivamente l'inizio e la fine della stringa. Se si utilizza 'String.matches (String)' di java, non è necessario utilizzarli, poiché questo metodo restituisce true solo se l'espressione regolare corrisponde alla stringa di input * whole *. – Czechnology

9

Perché non usare solo str.contains("DEF") e !str.contains("DEF")?

+2

+1: nessuna necessità di un'espressione regolare :) – LaGrandMere

+0

Mi piacerebbe sapere però per capire come funzionano. – dr85

+0

Il metodo built() contiene solo i byte nella stringa per una ricorrenza dei caratteri D, E ed F in quell'ordine, potreste considerarla una ricerca di forza bruta. Per esempio. una stringa di 100 caratteri verrebbe "controllata" fino a ~ 97 volte per quella sequenza. Le espressioni regolari sono un animale molto, molto diverso. – Brian

0

È possibile utilizzare semplicemente DEF come espressione regolare. Per identificare le stringhe che non lo contengono, è sufficiente restituire le stringhe che non corrispondono all'espressione precedente.

+0

come ti identificheresti usando regex tutte le parole che non contengono una sottostringa particolare – dr85

+0

Like I detto, avrei solo negato il risultato, quindi sarebbe '! string.matches (" DEF ");' – biziclop

+0

ma voglio dire al di fuori di java usando solo una regex – dr85

Problemi correlati