2016-05-04 17 views
1

Ich versuche, einige Konflikte in einer Zusammenführung von git zu beheben, gibt es eine Menge von < < < < < < HEAD und ====== Blöcke Ich möchte um in vielen Dateien nur eine leere Zeichenfolge zu finden und zu ersetzen.Regex, um Text zwischen zwei Strings zu entsprechen, einschließlich der Saiten

Ich fand dieses Regex-Muster, das richtig alles zwischen den zwei Strings übereinstimmt, aber es lässt die Anfangs- und Endzeichenfolgen aus, und ich möchte sie auch abgleichen können.

(?s)(?<=<<<<<<< HEAD).*?(?=\=\=\=\=\=\=\=) 

So Spiel < < < < < < < HEAD, ======= und alles zwischen ihnen eine Suche zu tun/ersetzen.

Kann mir jemand helfen? Ich würde dies auf Dateien ausführen Ich bin sicher, ich will nichts zwischen diesen Zeichenfolgen, ich denke, das ist auch der Grund, warum ich nicht versucht habe, ihr "its theirs" -Flag zu verwenden, da ich die Dateien zuerst sehen muss .

+0

Hinweis: '' und '' sind Look-arounds genannt (<= '...'?) (= '...'?). Sie schauen nur, ob eine Teilzeichenkette da ist, aber nicht übereinstimmt. – Xufox

+0

Welchen Editor/Werkzeug benutzen Sie? Wie viele Dateien hast du? Für nur eine Handvoll Dateien würde ich es lieber persönlich machen. –

+0

sie sind über 100 Dateien – andrux

Antwort

3

einfach auslassen des Look-arounds erwähnt von Xufox

(?s)(<<<<<<< HEAD)(.*?)(\=\=\=\=\=\=\=) 

Die .*? mit Klammern, so dass Sie gewickelt kann es in der Ersetzung verweisen. \1 für die erste Gruppe, \2 für die zweite und \3 für alles dazwischen (aber die Syntax kann variieren.)

+0

das war der gute, danke – andrux

+0

Im Geiste der Regex sollten Sie wahrscheinlich <{7} und \ = {7} verwendet haben – karina

2

Ich denke, Sie könnten hier die falsche Frage stellen. Die beste Möglichkeit, Zusammenführungskonflikte tatsächlich zu behandeln, ist ein Merge-Tool. Du solltest in etwas wie meld schauen. Und speziell git merge tool, um das zu verwenden. Manuelles Merges ist nicht Spaß ...

ziemlich ui Mit der Zusammenführung analysieren statt

+0

Danke, ich kannte das Tool nicht, aber es wäre immer noch übertrieben, da die meisten Dateien mindestens ein paar Dutzend dieser Konflikte haben, deshalb dachte ich, eine Regex-Lösung könnte schneller sein. – andrux

+0

@andrux Sie wären überrascht. Es ist sehr schön und es gab Konflikte aus einem bestimmten Grund. Sind Sie absolut sicher, dass Sie immer den neuen Code und nicht den Code verwenden möchten, mit dem Sie in Konflikt stehen? In diesem Fall behandelt Ihre ursprüngliche Frage nicht einmal die enge >>>>>>>> Commit-Nachricht – karina

+0

gut, die abschließende Commit-Nachricht kann ich nur suchen und durch eine leere Zeichenfolge ersetzen, es ist sowieso die gleiche Zeichenfolge ... und ja, ich bin mir sicher, immer neuen Code zu nehmen, ich aktualisiere eine PHP-Web-App mit der neuesten Version vom Autor, und ich habe nur einige Änderungen an einigen Dateien vorgenommen, also die Dateien, die ich geändert habe, möchte ich sie manuell überprüfen , der Rest möchte ich nehmen, was der Autor geändert hat – andrux

0

Sie möchten die das Öffnen und Schließen-Tags der Konflikt Abschnitte übereinstimmen?

Klammern werden für Gruppenerfassung in erster Linie verwendet, wenn Sie wie so tun:

(<<<<<<< HEAD)(.*\s)+(\s*=======) 

It 4 Gruppen schaffen, die Sie die Mitglieder zugreifen können.

Geprüft: http://regexr.com/

Verwandte Themen