Modo codicioso:
El indicador de cantidad predeterminado es el modo de codicia a menos que se indique lo contrario. Las expresiones de patrones codiciosos continuarán coincidiendo hasta que no puedan. Si encuentra que el resultado de la coincidencia de expresión no coincide con la esperada, es muy probable que sea porque, cree que la expresión solo coincidirá con los primeros personajes, pero de hecho es un patrón codicioso, por lo que continuará coincidiendo.
Codicia y no verde, ¿además? no es de grano:
var s = '1023000'.match (/(/d+) (0*)/); S ["1023000", "1023000", ""] var s =' 1023000'.match (/^(/d+) (0*) $/); S ["1023000", "1023000", "] var s = '1023000'.Match (/^(/d+?) (0*) $/); s ["10", "1", "0"]
Expresiones regulares de Java Utilice el patrón de coincidencia codicioso codicioso de forma predeterminada. Es la coincidencia más larga de este tipo (.*). Si se requiere la coincidencia más corta, se cambiará a (.*?) Es decir, es un patrón apenas de coincidencia.
Análisis principal:
Si se trata de un patrón de coincidencia codicioso, el motor de expresión regular coincidirá hasta el final de la cadena. Cuando el partido es falso, se retrasará y encontrará la última posición coincidente para devolver el resultado coincidente. Si se trata de un patrón apenas de coincidencia, el motor de expresión regular coincidirá con el carácter al final del patrón, y luego dará un paso atrás, descubra que la coincidencia es falsa y luego se remonta a la posición donde la coincidencia más reciente que se encuentra en la altura es verdadera, devolviendo el resultado.
Mira el código:
Ejemplo 1:
public void test51 () {string str = "aaa/" bbb/"ccc/" dd/"eee"; System.out.println (str); str = str.replaceall ("/"(.*)/" ","@"); System.out.println (str); } Producción:
aaa "bb" cc "ddd" eeeaaa@eee
Ejemplo 2:
@Test public void test52 () {string str = "aaa/" bbb/"ccc/" dd/"eee"; System.out.println (str); str = str.replaceall ("/"(.*?)/" ","@"); System.out.println (str); } Producción:
aaa "bb" cc "ddd" eeeaaa@ccc@eee