2016-10-16 1 views
-1

Ich habe einen JSON, von dem ich den gesamten Parameter ersetzen muss, wenn der Platzhalterwert nicht gefunden wird. Für zB -Regex stimmt mit dem ersten Auftreten in Bezug auf das Auftreten eines anderen Musters überein

{"A": {| "B": "{0}", | | "C": "{1}", | | "D": "{2}" |}};

In diesem json, wenn der Ersatz für Platzhalter 1 nicht gefunden wird, würde Ich mag

entfernen | "C": "{1}", |

Wenn ich diese Regex - (\|.*)(\{1}",\|)

Der bisherige Parameter auch abgestimmt ist -

| "B": "{0}", | | "C": "{1}", |

Wie verwende ich eine faule Version der gleichen, um das gewünschte Ergebnis zu erhalten? Dank

+0

vorsichtig sein, zu fragen [XY Probleme] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) auf Stapelüberlauf. Dies ist, wo dein Problem X ist, und du denkst, du hast die richtige Lösung Y, also fragst du nach Y, anstatt zu fragen: "Wie löse ich X?" Ihre Frage "Wie verwende ich eine faule Version" scheint zu implizieren, dass Sie bereits entschieden haben, dass ein Lazy Quantifier die Lösung ist - aber das ist es nicht. Wenn es einen bestimmten Grund gibt, warum du einen faulen Quantor brauchst (z. B. dein Professor sagte, du müsstest), musst du erklären, warum; sonst fragst du nur die falsche Frage. – ajb

+0

Entschuldigung! Sie haben Recht .. Ich habe mich geirrt über die Annahme, was die Lösung sein könnte – lost4ever

Antwort

0

Angenommen ich das Problem richtig zu verstehen: Ein faul (oder nur ungern) quantifier (das heißt mit .*? statt .*) werden Sie nicht, was Sie wollen. Dies liegt daran, dass der Mustervergleich immer noch von links nach rechts verläuft. Wenn also der Matcher den ersten | sieht, wird er die kleinste Anzahl von Zeichen finden, bis er den nächsten {1} findet. Da es ein widerwilliger Quantifizierer ist, wird es nach der kleinsten Anzahl von Zeichen suchen, die es finden kann, bevor es {1} findet, und nicht das größte. Aber das hilft dir nicht, weil es immer noch von der falschen Anfangs | sucht.

Die Lösung hier ist zu erkennen, dass die Übereinstimmung keine | darin außer den ersten und letzten Zeichen haben kann. Anstatt also .*, verwenden Sie ein Muster, das | ausschließt:

(\|[^|]*)(\{1}",\|) 
+0

Danke für die Antwort Sir – lost4ever

Verwandte Themen