2010-04-03 6 views
9

Ich benutze Regex, um alle nicht-proprietären Namen in meinen JSON-Dateien zu entsprechen. Eclipse hat kein Problem, die gewünschten Matches zu finden, aber wenn ich die angepassten Saiten mit "$2" ersetzen will, bekomme ich diesen Fehler: Match string has changed in file filename.json. Match skippedProblem mit Replace in Eclipse

Hier ist die regex Ich verwende:

((\w+)\s*(?!['"])(?=:)) 

Jede Idee, wie um dieses Problem zu umgehen?

+0

Nur ein wilder Gedanke: Ich denke, es ist in einer anderen Erfassungsgruppe auf der Erfassungsgruppe ausfällt. Vielleicht existiert $ 2 nicht, es hat nur $ 1 und 3 Untergruppen darin. Keine Ahnung, wie du auf diese zugreifen würdest. – NomeN

Antwort

1

Es klingt wie ein Problem mit dem Werkzeug und nicht die Regex, aber ich bin nicht vertraut mit Eclipse, so dass ich nicht genauer sein kann. Könnte es sein, \2 statt $2 zu erwarten?

Angenommen, die Eigenschaftsnamen stimmen mit \w+ überein, sollte diese Regex funktionieren, obwohl das negative Lookahead redundant ist. Wenn das nächste Zeichen ein Doppelpunkt ist - (?=:) - dann ist es natürlich kein Apostroph oder Anführungszeichen-- (?!['"]).

+0

Eclipse verwendet $ 1, $ 2, nicht \ 1, \ 2. Danke für die Verbesserung der Regex, BTW. – Imran