Benötigen Sie einen regulären Ausdruck, um keyword='value' mit einfachen oder doppelten Anführungszeichen zu analysieren

StackOverflow https://stackoverflow.com/questions/962120

  •  12-09-2019
  •  | 
  •  

Frage

Ich habe Probleme beim Schreiben eines regulären Ausdrucks (geeignet für preg_match() von PHP), der Schlüsselwort='Wert'-Paare analysiert, unabhängig davon, ob die Zeichenfolge <Wert> in einfache oder doppelte Anführungszeichen gesetzt ist.IOW in beiden folgenden Fällen muss ich den <Name> und den <Wert> abrufen, wobei die Zeichenfolge <Wert> den nicht umschließenden Typ von Anführungszeichen enthalten kann:

name="value"
name='value'
War es hilfreich?

Lösung

In Perl ist dies ein regulärer Ausdruck, der funktionieren würde.Es wurde zuerst nach dem Anfang der Zeile gesucht, dann nach einem oder mehreren Nicht-=-Zeichen und diese wurden auf $1 gesetzt.Als nächstes sucht es nach dem = und dann nach der a-Klammer mit der Auswahl „ oder ' und setzt diese auf $2.

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/

Wenn Sie möchten, dass es mit leeren Ausdrücken wie folgt übereinstimmt.

Dies=""

Ersetzen Sie die letzten beiden + durch ein *. Andernfalls sollte dies funktionieren

BearbeitenWie in den Kommentaren erwähnt.Doug benutzte...

 /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/

Dies entspricht einem optionalen Leerzeichen am anderen Ende der Eingabe oder des Werts und er hat die Zeilenendemarkierung entfernt.

Andere Tipps

/^(\w+?)=(['"])(\w+?)\2$/

, die den Schlüssel in $1 und den Wert in $3 platzieren wird.

Ein paar Jahre zu spät, aber da diese Frage sehr auf Google rangiert, und die Antworten, meine Bedürfnisse nicht befriedigen, hier ist eine andere Ausdruck :

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2

Dies wird einfache oder doppelte Anführungszeichen entsprechen, unter Berücksichtigung entkam Anführungszeichen und nicht notierten Werte.

name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""

Es wird jedoch die Einschränkung, dass, wenn ein Wert den Schlüssel aus dem nächsten Schlüssel / Wert-Paar fehlt gelesen wird. Dies kann durch die Verwendung eines durch Kommata getrennte Liste von Schlüssel / Wert-Paaren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top