Regex passt alles nach dem Fragezeichen?

125

Ich habe einen Feed in Yahoo Pipes und möchte nach einem Fragezeichen alles abgleichen.

Bisher habe ich herausgefunden, wie man das Fragezeichen mit ..

\?

Nun nur um alles zusammenzubringen, was nach / nach dem Fragezeichen steht.

Kennzeichen
quelle
2
\?.*stimmt mit allem überein (einschließlich einer leeren Zeichenfolge) ?.
Khachik
Welche Programmiersprache verwenden Sie?
Mark Byers
1
Für diejenigen, die Java verwenden, ist es"\\?"
CodyBugstein

Antworten:

251
\?(.*)

Sie möchten den Inhalt der ersten Erfassungsgruppe.

thejh
quelle
15
@Mark Wenn dies das ist, was Sie brauchten (obwohl diese Frage alt ist!), Markieren Sie dies bitte als Antwort.
Pieter VDE
5
@ Dreamonic Glaube nicht, dass es passiert :(
Starkers
4
@Starker Du hast recht. Es wird nicht passieren. Mark war seitdem nicht mehr dabei Feb 5 '11 at 10:41. Es ist immer noch gut, auf jede Veränderung hinzuweisen, die wir bekommen. Vielleicht lernt jemand von Dreamonic, der darauf hinweist.
DutGRIFF
1
Wie würden Sie den Inhalt nach dem letzten Fragezeichen erfassen? Ich möchte danach "verankern" - ich bin mir nicht sicher, ob Anker das richtige Wort ist.
BKSpurgeon
2
@ BKSpurgeon erste Capture-Gruppe in ^. * \? ([^?] *) $
Sollte
61

Versuche dies:

\?(.*)

Die Klammern sind eine Erfassungsgruppe, mit der Sie den Teil der Zeichenfolge extrahieren können, an dem Sie interessiert sind.

Wenn die Zeichenfolge neue Zeilen enthalten kann, müssen Sie möglicherweise den Modifikator "Punkt alle" verwenden, damit der Punkt mit dem neuen Zeilenzeichen übereinstimmt. Ob und wie Sie dies tun müssen oder nicht, hängt von der verwendeten Sprache ab. Anscheinend haben Sie vergessen, die Programmiersprache zu erwähnen, die Sie in Ihrer Frage verwenden.

Eine andere Alternative, die Sie verwenden können, wenn Ihre Sprache Lookbehind-Behauptungen mit fester Breite unterstützt, ist:

(?<=\?).*
Mark Byers
quelle
Oh die feste Breite? Kann ich nach so etwas suchen? Themen: Code, Programmierung, Design Ich möchte also den Doppelpunkt auswählen und bis zum Ende der Zeile und bis zum Ende der Zeile nach hinten schauen. (in diesem Fall Ende der Leitung ist „Design“.
Mark
@ Mark: Welche Sprache benutzt du?
Mark Byers
Ich verwende Yahoo Pipes, das Regex ausschließt. Ich habe diese Frage beantwortet bekommen und suche nun nach einem regulären Ausdruck, der 6 Zeichen hinter einem Doppelpunkt und ebenso viele (alle) vorwärts auswählt.
Mark
@ Mark: Ich habe Ihre Liste mit Fragen überprüft, aber ich sehe Ihre neue nicht. Bist du sicher, dass du es gepostet hast?
Mark Byers
Ich werde diese neue Frage in wenigen Augenblicken noch einmal stellen. Ich denke, es ist am besten, meine Fragen getrennt zu halten und eigentlich beide gleichzeitig zu stellen. Danke
Mark
36

Mit der positiven Lookbehind- Technik:

(?<=\?).*

(Wir suchen hier nach einem Text, dem ein Fragezeichen vorangestellt ist.)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

Beispiel

Grundsätzlich ?<=handelt es sich um ein Gruppenkonstrukt, für das das maskierte Fragezeichen erforderlich ist , bevor eine Übereinstimmung hergestellt werden kann.

Sie arbeiten sehr gut, aber nicht alle Implementierungen unterstützen sie.

DarkNeuron
quelle
13
\?(.*)$

Wenn Sie alle Zeichen nach "?" Sie können eine Gruppe verwenden, um mit jedem Zeichen übereinzustimmen, und Sie sollten das "$" -Zeichen verwenden, um das Zeilenende anzugeben.

s3v3n
quelle
1
In den meisten Implementierungen mit regulären Ausdrücken .stimmt das standardmäßig nicht mit dem neuen Zeilenzeichen überein. Infolgedessen würde es auch ohne das Zeilenendezeichen im Ausdruck bis zum Zeilenende übereinstimmen.
Mark Byers
2

Schauen Sie sich diese Site an: http://rubular.com/ Grundsätzlich können Sie auf der Site einen Beispieltext eingeben (wonach Sie auf Ihrer Site suchen würden). Wenn Sie dann den regulären Ausdruck erstellen, wird hervorgehoben, was übereinstimmt Echtzeit.

Austin Lin
quelle
Danke dafür, wissen Sie, wie man einen Doppelpunkt findet? Und eine bestimmte Anzahl von Zeichen vor dem Doppelpunkt?
Mark
/([a-zA-Z]{4}):/wird passen Test: Welcomeund greifenTest
Austin Lin
0

str.replace(/^.+?\"|^.|\".+/, '');

Dies ist manchmal schlecht zu verwenden, wenn Sie auswählen möchten, was zwischen "" entfernt werden soll, und Sie es nicht mehr als zweimal in einer Zeichenfolge verwenden können. Alles, was es tut, ist auszuwählen, was nicht zwischen "" liegt, und es durch nichts zu ersetzen.

Selbst für mich ist es ein bisschen verwirrend, aber ich versuche es nicht zu erklären. ^.+?(nichts OPTIONALES) bis zuerst "dann |oder / stop (immer noch recherchierend, was es wirklich bedeutet) bis / at ^.bis vor der 2. "Verwendung ( |stop / at) nichts ausgewählt hat . Und wählen Sie alles aus, was danach kommt. +.

Kadhem
quelle
Bitte fügen Sie eine Beschreibung Ihres Codes hinzu, damit wir wissen, was er tut und warum.
Pika der Zauberer der Wale