2017-12-18 6 views
0

Ich brauche einen Regex-Ausdruck, der 'xmlAttributeReplace =' und das Zitat nach der geschweiften Klammer entspricht. Ich ersetze diese Übereinstimmungen dann durch eine leere Zeichenfolge.Syntax für LookBehind regex Ausdruck

Probeneingang

<autoUnlockSection xmlAttributeReplace="#{token.variable.sample}" 
    xdt:Transform="Replace"/> 

Im Moment habe ich die folgende

xmlAttributeReplace="|(?<=})" 

Mein Problem ist, wie ich nach der geschweiften Klammer das Zitat zu finden bin falsch. Der Blick hinter ist zu suchen

  1. xmlAttributeReplace =
  2. keine Leerzeichen zwischen dem Angebot und xmlAttributeReplace =

Gibt es einen Guru hier bei regex, die die korrekte Syntax kennen könnte?

+2

Welche Programmiersprache verwenden Sie? – Allan

+0

Warum verwenden Sie eine Regex, wenn es einfacher, einfacher, zuverlässiger und weniger fehleranfällig ist, einen vorhandenen XML-Parser zu verwenden? – ikegami

Antwort

1

Wenn Sie das Attribut und den Wert entfernen möchten, sollten Sie verwenden:

xmlAttributeReplace="[^" ]+" 

[^" ]+ einfache Mittelwert „Spiel-Zeichen, die keine Leerzeichen oder Anführungszeichen sind“. Sie können wörtlicher sein und passen \#\{[\w.]+\}.

Wenn Sie den Wert halten wollen, aber das Attribut und Schließen Zitat entfernen, ist die einfachste Methode ist, den Wert zu erfassen:

xmlAttributeReplace="([^" ]+)" 

und ersetzen mit $1.

Arbeitsbeispiel: https://regex101.com/r/tEOJwh/2

Beachten Sie, dass Sie nicht lookbehind hier benötigen, noch ein regulärer Ausdruck Guru.
Mögliche Einschränkungen natürlich ist, dass Sie XML mit einem Regex übereinstimmen - XML ​​kann kompliziert sein und Kommentare, Zeilenumbrüche, einfache Anführungszeichen, Escapezeichen usw. enthalten.