2017-01-05 4 views
2

Ich muss Multiline-Suche, die alle 0xCD am Anfang einer Zeile bis zum ersten Auftreten von 0xDD auch am Anfang einer Zeile entspricht.Passen alle '^ 0xCD' vor dem ersten Auftreten von '^ 0xDD'

Ich versuchte mit dieser (?s)^0xCD(?=.*?^0xDD) aber es passt nur alle ^0xCD auch die nach ^0xDD.

Ich benutze Sublime Text 3 Editor mit regulären Ausdrücken aktiviert.

Eingang

0xCD 0xAA 0xBB 
0xAA 0xBB 
0xCD 0x78 
0xAA 0xBB 
0xDD 0xBB 
0xCD 0xBB 
0xDD 0xA4 
0xCD 

Als Ausgang I ST3 erwarten zwei Spiele von 0xCD zu finden. Der eine bei der Linie 1 und der eine bei der Linie 3. Die reale Datei ist in der Tat viel größer und die Anzahl der Ereignisse in der Statusleiste des ST3 angezeigt, wenn die Regex-Match mir viel Zählen erspart. 0xAA 0xBB

+1

Bitte geben Sie einen Text ein, mit dem Sie sich beschäftigen. Suchen Sie nur oder versuchen Sie, diese Zeichenfolgen zu entfernen/ersetzen? –

+0

Versuchen Sie '(? S) \ G (? :(?! 0xDD).) *? \ K0xCD' –

Antwort

1

können Sie verwenden, um eine \G basierte regex:

(?s)\G(?:(?!0xDD).)*?\K0xCD 

Einzelheiten:

  • (?s) - ein Inline-DOTALL Modifikator . Spiel Zeilenumbruch Symbole machen auch
  • \G - ein Anker, der am Anfang der Saite und dann nach jeder erfolgreichen Matte übereinstimmt ch
  • (?:(?!0xDD).)*?(?:(?!0xDD).)*? - ein tempered gierigen Token passend zu jedem char, das ist kein Ausgangspunkt für eine 0xDD Zeichenfolge, auf eine faule Weise abgestimmt, das heißt, das Muster wird zuerst übersprungen, und die folgenden Muster werden zuerst und nur ausprobiert wenn sie es versäumen, eine Übereinstimmung zu finden, wird dieses Token „erweitert“ (wenn Sie ? entfernen das Token nicht gut funktionieren)
  • \K - ein Spiel Reset Operator, der den Text alle so fett während der aktuellen Iteration angepasst verwirft
  • 0xCD - Die Teilzeichenfolge, die abgeglichen und als Übereinstimmung zurückgegeben werden soll.
Verwandte Themen