2017-12-15 7 views
0

Ich möchte alle Breiten in meiner Datei ersetzen. Wir stellen alle Tabellen auf Bootstrap um, also verwende ich Regex, um einige Dinge zu ersetzen, um meine Arbeit zu erleichtern.Ersetzen mit Regex in Sublime Text 3

Ich habe ein Problem, das ihr in den folgenden Bildern

enter image description here

enter image description here

enter image description here

Im zweiten Bild sehen könnt ihr sehen könnt, dass die Suche Regex fast alle Linien pflücken. Kannst du mir erklären wieso?

Btw Sublime Text verwendet PCRE

Edit: habe gerade eine schnelle Lösung, aber ich will noch wissen, warum Punkt mit es nicht funktionieren.

width='\w*%' 

dank

Antwort

1

verwenden ein:

Suche: width='[^']+'

wo [^']+ bedeutet 1 oder mehr jedes Zeichen, das kein Zitat

1

.* Matches so viel Eingang ist als möglich. Also in Ihrem regex width='.*', die Regex-Engine tut dies:

  1. die erste Instanz von width='
  2. Übereinstimmung finden, so viel wie möglich
  3. gehen zurück bis zur Schließung '

So finden ist Dies entspricht fast der gesamten Zeichenfolge. Es ist normalerweise besser, den Inhalt einer Zeichenfolge mit einer negierten Zeichenklasse zu vergleichen: width='[^']*'. Ie .: "so viel wie möglich zusammenpassen, solange es kein einfaches Zitat ist".

Alternativ erlaubt PCRE den *? Quantifizierer, was bedeutet: so wenig wie möglich zusammenpassen. Das ist oft intuitiver. Dann wäre die Regex width='.*?'.

2

In Ihrem Muster

width='.*' 

wird der Punkt, darunter einfache Anführungszeichen, und so viele wie möglich jedes Zeichen. So passt es alles bis zum letzten Apostroph

Sie dies einfach durch die Verwendung eines nicht gierige quantifier beheben können .*? die als wenige Zeichen wie möglich

width='.*?' 
übereinstimmen