2009-12-17 21 views

risposta

116

per un'espressione regolare come .* o .+, aggiungere un punto interrogativo (.*? o .+?) per abbinare il minor numero di caratteri possibile. Per abbinare facoltativamente una sezione (?:blah)? ma senza corrispondere se non strettamente necessario, utilizzare qualcosa come (?:blah){0,1}?. Per una corrispondenza ripetuta (utilizzando la sintassi {n,} o {n,m}), aggiungere un punto interrogativo per provare ad abbinare il minor numero possibile (ad esempio {3,}? o {5,7}?).

Anche la documentazione su regular expression quantifiers può essere utile.

+1

Non so, se io sono l'unico ad avere questo malinteso, ma è importante notare: Mentre è vero che l'operatore non avido corrisponderà al minor numero di caratteri possibile, potrebbe non essere la partita che si sta cercando. "Il minor numero di caratteri possibile" non è uguale alla "corrispondenza più breve possibile" rispetto agli standard RegEx. Vedere la risposta sotto il mio commento: Con 'abcabk' e' a. +? K', RegEx corrisponderà all'intera stringa. – Jayjayyy

47

L'operatore non avido, ?. In questo modo:

.*? 
17

L'operatore non avido non significa che la corrispondenza più breve possibile:

abcabk

a.+?k corrisponderà l'intera stringa (in questo esempio) anziché solo gli ultimi tre segni.

Mi piacerebbe davvero trovare la corrispondenza più piccola possibile.

Questa è l'ultima corrispondenza possibile per "a" per consentire comunque tutte le partite per k.

Credo che l'unico modo per farlo è quello di fare uso di un'espressione come:

a[^a]+?k 
+1

Oppure cerca in ordine inverso, iniziando alla fine, quando le partite sono annidate: "(ab (abk) bk)". – LBogaardt

+5

@LBogaardt come si effettua una ricerca in ordine inverso? non capisco – azerafati

+1

@LBogaardt Ancora una domanda aperta: come si può effettuare una ricerca in ordine inverso? Diciamo che voglio prendere "taxi". Se il mio input è 'caaacab' e cerco' a. *? B', restituirà la stringa completa al posto della short match all'interno. Come faccio a cercare all'indietro dal 'b'? – C4u

Problemi correlati