Regex - Matching-text NACH bestimmten Zeichen
Ich will kratzen die Daten aus einigen text-und dump es in ein array. Betrachten Sie den folgenden text als Beispiel Daten:
| Example Data
| Title: This is a sample title
| Content: This is sample content
| Date: 12/21/2012
Ich bin derzeit mit dem folgenden regex zu kratzen, die Daten, die angegeben ist, nach der 'Doppelpunkt' - Zeichen:
/((?=:).+)/
Leider ist diese regex schnappt sich auch den Doppelpunkt und das Leerzeichen nach dem Doppelpunkt. Wie kann ich nur nehmen Sie die Daten?
Auch, ich bin mir nicht sicher, ob ich das Tue Recht.. aber es scheint als ob das außerhalb der Klammern bewirkt, dass ein match um ein array zurückgeben. Ist das die Funktion des parens?
EDIT: ich bin mit Rubular zu testen, meine regex-Ausdrücke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man ändern:
und schnappen Sie sich den Inhalt der Gruppe 1. Ein lookbehind funktioniert auch, aber, und tut genau das, was Sie fordern:
Zusätzlich zu @minitech Antwort, Sie können auch eine 3. variation:
Hier der Unterschied sein, den Sie erstellen/packen der Gruppe eine Blick-hinter sich.
Wenn Sie immer noch lieber die look-ahead-eher als Blick-hinter-Konzept. . .
Dadurch wird eine Gruppierung rund um Ihre vorhandenen regex-wo wird es zu fangen die es innerhalb einer Gruppe.
Und ja, der außerhalb der Klammer in deinem code wird machen ein Spiel. Vergleichen, dass zu den letzteren Beispiel, das ich gab, wo die gesamte look-ahead ist 'gruppiert', anstatt unnötig mit einem
/( ... )/
ohne die/(?= ... )/
seit der ersten Folge in den meisten regelmäßige Ausdruck-Motoren wieder die gesamte gematchte string./(?<=: ?)(.+)/
wird nicht funktionieren.Ich weiß, Sie sind gefragt, für regex, aber ich sah nur die regex-Lösung und fand, dass es eher schwer zu Lesen für diejenigen, die nicht mit regex.
Ich bin auch mit Ruby und ich beschlossen, es zu tun mit:
Das tut, was Sie verlangen, und IMHO ist es weit mehr lesbar ist.
Für eine sehr lange Zeichenfolge, es könnte ineffizient sein. Aber nicht für diesen Zweck.