Alle,
Ich versuche, reguläre Ausdrücke etwas besser zu erkunden. Ich kann mit einem einfachen Contains() erreichen, was ich will – aber ich versuche herauszufinden, was das Äquivalent wäre, wenn ich reguläre Ausdrücke verwende.
Der Regex, den ich habe, funktioniert nicht so, wie ich es erwartet habe. Kann mir jemand den entsprechenden Regex nennen und erklären, was ich falsch gemacht habe?
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");Im Moment passen Sie zusammen entweder ein 'a' am Anfang der Zeichenfolge ('^a') oder ein „A“, gefolgt von null oder mehr Buchstaben „L“ oder „B“ („A[LB]*“).Einige Notizen:
- Es gibt keine Klammern um das oder, sodass die Übereinstimmung entweder die gesamte Zeichenfolge vor oder nach dem „|“ ist.Wenn die Zeichenfolge also mit „a“ beginnt, ist sie fertig und passt zu nichts anderem.
- Die eckigen Klammern bedeuten, dass alle darin enthaltenen Zeichen übereinstimmen.
- Das Sternchen bedeutet, dass null oder mehr des vorangehenden Zeichens oder der vorangehenden Gruppe übereinstimmen, in diesem Fall bedeutet das die Gruppe innerhalb der eckigen Klammern.
- Zusammen stimmt die rechte Seite von „or“ mit jedem dieser Punkte überein, irgendwo innerhalb Ihrer Zeichenfolge (nicht nur am Anfang):
- A
- AL
- AB
- ALB
- ABL
- ALLELLLLLLLLBLLBBBBBLLBLLB
- Die Zeichenfolge aA wäre eigentlich zwei verschiedene Übereinstimmungen der Regex-Funktion.
Sie möchten wahrscheinlich Folgendes: „^(a|A)LB.*$“ oder Folgendes: „^[aA]LB.*$“
- Beginnen Sie am Anfang der Zeichenfolge und suchen Sie nach einem „a“ oder „A“, gefolgt von „
- Die Zeichen LB in der Reihenfolge, gefolgt von
- Null oder mehr beliebige Zeichen, der Punkt ist ein beliebiges Zeichen (.*), gefolgt von
- Das Ende der Zeichenfolge.Dies ist wahrscheinlich nicht notwendig.
Des = {"ALBANY", "aLBUQUERQUE"};
Kasse regexr.com , es hilft nicht nur bei der Überprüfung Ihres Codes, sondern verfügt auch über gute Abschnitte „Referenz“ und „Spickzettel“ auf der linken Seite.Ich schalte Multiline fast immer ein (Flaggen oben rechts).
Bearbeitet, um zu verdeutlichen, dass eine Übereinstimmung an einer beliebigen Stelle innerhalb der Zeichenfolge erfolgen kann.