2010-03-08 25 views
20

Wie kann ich alle Zeichen zwischen 2 angegebenen Zeichen übereinstimmen, sagen " " -> von sdfsf " 12asdf " sdfregex finden Zeichen zwischen „“

Ich will nur 12asdf bekommen.

+1

Was hatten gehofft, Sie zu bekommen? Gibt es nicht die führenden Leerzeichen zurück? Zeigen Sie uns die von Ihnen verwendete Regex und fügen Sie Ihre Beispielergebnisse bitte in einen Codeblock ein. – Robusto

Antwort

61

Sie können das folgende Muster alles zwischen " " erhalten, einschließlich der vorderen und hinteren White Spaces:

"(.*?)" 

oder

"([^"]*)" 

Wenn Sie alles zwischen dem „“ aufnehmen möchten, ohne die führenden und nachgestellten Leerzeichen, die Sie tun können:

"\s*(.*?)\s*" 

oder

"\s*([^"]*)\s*" 
+0

Einverstanden. Achten Sie darauf, alles zu finden, was Sie bei "nicht gierigen" (vs. "gierigen") Ausdrücken finden können. Sollte eine interessante Lektüre sein, wenn Sie es noch nicht wissen. Und es wird Ihr Leben mit Regex sicherlich einfacher machen, wenn Sie den Unterschied kennen. – exhuma

0

Sie können preg_match(/"([^"]*)"/,$input,$matches); verwenden. $matches[1] wird haben, was Sie wollen.

5

Ich schlage vor, Sie

(?<=")(?:\\.|[^"\\])*(?=") 

verwenden nur dieses Spiel, was zwischen den Anführungszeichen ist (nicht die Anführungszeichen selbst) und auch entkam Anführungszeichen innerhalb der Zeichenfolge richtig handhaben.

So in wird es übereinstimmen She said, \"Hi!\".

Wenn Sie JavaScript oder Ruby verwenden (die Sie nicht erwähnt) und daher nicht verwenden können Lookbehind,

"((?:\\.|[^"\\])*)" 

verwenden und nicht mit der Erfassungsgruppe arbeiten. 1.

+0

Das gehandelte Zitate für mich oder auf dieser Seite gehandhabt hat https://regex101.com/ – Don

+0

@Don: Können Sie den Link zu der nicht funktionierenden Regex (klicken Sie auf Save Regex und post diesen Link)? –

-1
[^"].*[^"] 

Wenn Sie eingeben: "Elie", wird es geben Elie (Anmerkung: ohne Anführungszeichen)

Verwandte Themen