finden word vor dem zweiten Komma mit regex
Ich das Wort gespeichert werden soll, bevor das zweite Komma in einen string.
Also, wenn der string sieht wie folgt aus: Hallo, mein name ist David, bla, bla.
Möchte ich eine variable $test = David
Du musst angemeldet sein, um einen Kommentar abzugeben.
^
-- Der Anfang des string/line[^ ]
-- Jedes Zeichen, das nicht seins ist ...,
-- ... ein Komma*
-- Null oder mehr des vorangegangenen,
-- Ein Komma[^,]*
-- Wieder, jedes Zeichen, das nicht ein Komma, einmal oder mehrmals wiederholt\b
- Ein Wort-Grenze (zero width)( )
-- Erfassungsgruppe\w
-- Jedes Wort Charakter+
- Eine oder mehrere der vorstehenden\b
- Ein Wort-Grenze (zero width),
-- Ein KommaIhre regex könnte z.B. so Aussehen:
Match-Sequenz, die nicht ein Komma, gefolgt von dem ersten Komma, gefolgt von mehr nicht-ein Komma, dann eine Wort-Grenze und Ihre eigentliche Wort, und dann das zweite Komma.
\b
-\w
ist das Wort selbst\w
ist ein Wort-Zeichen, nicht eine Wort-Grenze.[^,]
ist jedes Zeichen, dass nicht ein Komma, nicht ein Wort-Zeichen.(\w+)
statt([^,]*)
als später passt sogar eine leere Zeichenfolge. Wenn getestet mit Expresso, dieser regex matched-Wort-Grenze und die leere Zeichenfolge nach David.dies ist eine web-basierte nettes tool, welcher name ist txt2re
Und hier ist mein Ansatz:
Hokay, ich weiß, das ist alt, aber ich übe...
Wie etwa
/,.*?(\w+),/
?Gibt es eine gespeicherte Erklärung auf dieses hervorragende tool: http://regex101.com/r/yA4gN5
,
entspricht dem Zeichen , buchstäblich.*?
entspricht einem beliebigen Zeichen (außer newline)(\w+)
\w+
passen zu jedem Wortzeichen [a-zA-Z0-9_],
entspricht dem Zeichen , buchstäblichDieser regex (und etwas oberhalb) schlägt fehl, wenn David in einen nicht-Wort-Zeichen nach seinem Namen, so
"David!,' und 'David' beide scheitern.