2009-12-17 9 views

Respuesta

116

Para una expresión regular como .* o .+, anexar un signo de interrogación (o .*?.+?) para que coincida con el menor número de caracteres posible. Para hacer coincidir opcionalmente una sección (?:blah)? pero sin hacer coincidir a menos que sea absolutamente necesario, use algo como (?:blah){0,1}?. Para una coincidencia que se repite (utilizando la sintaxis {n,} o {n,m}), agregue un signo de interrogación para intentar hacer coincidir el menor número posible (por ejemplo, {3,}? o {5,7}?).

La documentación en regular expression quantifiers también puede ser útil.

+1

No sé, si yo soy el único que tiene este mal entendido, pero es importante tener en cuenta: Si bien es cierto que el operador no codicioso coincidirá con la menor cantidad de personajes posible, puede que aún no sea el juego que se busca. "La menor cantidad posible de caracteres" no equivale a la "coincidencia más corta posible" con respecto a los estándares RegEx. Ver la respuesta debajo de mi comentario: con 'abcabk' y' a. +? K', RegEx coincidirá con la cadena completa. – Jayjayyy

47

El operador no codicioso, ?. De este modo:

.*? 
17

El operador no codiciosos no significa que la coincidencia más corta posible:

abcabk

a.+?k coincidirá con la cadena completa (en este ejemplo) en lugar de sólo los últimos tres signos.

Me gustaría encontrar realmente la menor coincidencia posible en su lugar.

Esa es la última coincidencia posible para 'a' aún permitir todas las coincidencias para k.

Creo que la única manera de hacerlo es hacer uso de una expresión como:

a[^a]+?k 
+1

O busque en orden inverso, empezando por el final, cuando las coincidencias están anidadas: "(ab (abk) bk)". – LBogaardt

+5

@LBogaardt ¿cómo se buscaría en el orden inverso? no lo entiendo – azerafati

+1

@LBogaardt Pregunta todavía abierta: ¿Cómo se buscaría en el orden inverso? Digamos que quiero obtener 'cab'. Si mi entrada es 'caaacab' y busco' a. *? B' devolverá la cadena completa en lugar de la coincidencia corta adentro. ¿Cómo buscaría al revés desde la 'b'? – C4u

Cuestiones relacionadas