Aide RegexTous,
Essayer d'explorer un peu mieux les expressions régulières. Je peux obtenir ce que je veux avec un simple Contient() - mais en essayant de voir quel serait l'équivalent en utilisant des expressions régulières.
La regex que j'ai ne fonctionne pas comme je m'y attends, quelqu'un peut-il m'indiquer la regex équivalente et expliquer ce que je me suis trompé?
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 : Aide RegexEn ce moment, vous correspondez soit un 'a' au début de la chaîne ('^a') ou un 'A' suivi de zéro ou plusieurs lettres 'L' ou 'B' ('A[LB]*').Quelques notes:
- Il n'y a pas de parenthèses autour du ou donc la correspondance est soit la chaîne entière avant ou après le '|'.Donc, si la chaîne commence par 'a', c'est fait et ne correspondra à rien d'autre.
- Les crochets signifient correspondre à n'importe quel caractère à l'intérieur.
- L'astérisque signifie correspondre à zéro ou plus du caractère ou du groupe précédent, dans ce cas, cela signifie le groupe à l'intérieur des crochets carrés.
- Ensemble, le côté droit du ou correspondra à l'un de ceux-ci, n'importe où dans votre chaîne (pas seulement au début):
- UN
- AL
- UN B
- ALB
- ABL
- TOUSLLLLLLLLBLBBBBLLBLLB
- La chaîne aA serait en fait deux correspondances différentes de la fonction Regex.
Vous voulez probablement ceci : "^(a|A)LB.*$", ou ceci : "^[aA]LB.*$"
- En commençant au début de la chaîne, faites correspondre un a ou un A, suivi de
- Les caractères LB, dans l'ordre, suivis de
- Zéro ou plus de n'importe quel caractère, le point est n'importe quel caractère (.*), suivi de
- La fin de la chaîne.Ce n'est probablement pas nécessaire.
Des = {"ALBANY", "aLBUQUERQUE"};
Vérifier regexr.com , non seulement il aide à vérifier votre code, mais il contient également de bonnes sections "référence" et "feuille de triche" sur la gauche.J'active presque toujours le multiligne (drapeaux en haut à droite).
Modifié pour clarifier que la correspondance peut être n'importe où dans la chaîne.