Ayuda de expresiones regularesTodo,
Tratando de explorar las expresiones regulares un poco mejor. Puedo lograr lo que quiero con un simple Contiene (), pero trato de ver cuál sería el equivalente usando Expresiones regulares.
La expresión regular que tengo no funciona de la manera que esperaba, ¿alguien puede indicarme la expresión regular equivalente y explicarme en qué me he equivocado?
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dt:city[2] = "aLBUQUERQUE";
CityList = dt:City << Get Values;
Des = list();
for(i = 1 , i <= N Items(CityList),i++,
If(!IsMissing(Regex(Char(CityList[i]),"^a|A[LB]*")),
Insert Into(Des,CityList[i]);
);
);
/*for(i = 1 , i <= N Items(CityList) , i++,
If(Contains(CityList[i],"aLB")|Contains(CityList[i],"ALB"),
Insert Into(Des,CityList[i]);
);
);*/
Show(Des);
//Close All(Data Tables,"No Save");Re: ayuda RegexAhora mismo estás emparejando cualquiera una 'a' al comienzo de la cadena ('^a') o una 'A' seguida de cero o más letras 'L' o 'B' ('A[LB]*').Algunas notas:
- No hay paréntesis alrededor de o por lo que la coincidencia es la cadena completa antes o después de '|'.Entonces, si la cadena comienza con 'a', está lista y no coincidirá con nada más.
- Los corchetes significan que coinciden con cualquier carácter dentro de ellos.
- El asterisco significa que coincide con cero o más del carácter o grupo anterior, en este caso eso significa el grupo dentro de los corchetes.
- Juntos, el lado derecho de o coincidirá con cualquiera de estos, en cualquier lugar dentro de su cadena (no solo al principio):
- A
- Alabama
- AB
- ALBA
- ABL
- TODOLLLLLLLLBLLBBBBBLLBLLB
- La cadena aA en realidad serían dos coincidencias diferentes de la función Regex.
Probablemente quieras esto: "^(a|A)LB.*$", o esto: "^[aA]LB.*$"
- Comenzando al principio de la cadena, haga coincidir una a o A, seguida de
- Los caracteres LB, en orden, seguidos de
- Cero o más de cualquier carácter, el punto es cualquier carácter (.*), seguido de
- El final de la cadena.Esto probablemente no sea necesario.
Des = {"ALBANY", "aLBUQUERQUE"};
Verificar regexr.com , no solo ayuda a verificar su código, sino que también tiene buenas secciones de 'referencia' y 'cheatsheet' a la izquierda.Casi siempre enciendo multilínea (banderas en la parte superior derecha).
Editado para aclarar que la coincidencia puede estar en cualquier lugar dentro de la cadena.