2017-01-04 2 views
0

In der Regex-Syntax von Visual Studio Code ist es möglich, alle Vorkommen einer bestimmten Zeichenfolge zu finden, z.Finden Sie Zeilen, die mit einem Muster übereinstimmen, mit Ausnahme von Mustern, die ein anderes Muster enthalten

&$ 

es sei denn, es gibt ein anderes Muster, sagen die Zeichenfolge function( in der gleichen Zeile, zum Beispiel

function functionname(&$variable, ...) 

?

Dies funktioniert nicht für mich:

(?!function).*\&\$ 

Es einfach ergibt alle Ergebnisse, beide Linien mit function in ihnen, und ohne, als ob ich eine einfache Suche nach &$ tun wurden.

VSCode's Regex help page Visual Studio-Hilfeseite scheint darauf hinzudeuten, dass die Art und Weise ist, aber ich kann nicht scheinen, um es in jeder Konstellation in VS-Code zu arbeiten, so scheint es, die Anwendungen mit unterschiedlichen Schreibweisen.

Auch funktionieren ein paar andere Notationen (ich vermute von verschiedenen Regex-Aromen), dass ich für Google gegoogled habe.

+0

die Seite helfen gilt nicht für VS Code. Es gilt für volle VS. Und VS-Code scheint keine .NET Regexes zu verwenden. – Eric

+0

@Eric tatsächlich! Das erklärt, warum es nicht funktioniert hat. Ich werde bearbeiten. –

Antwort

2

Dieses regexp arbeiten:

^(?!.*function\().*(\&\$) 

Die &$ in der ersten Gruppe aufgenommen wird: $1

Für die Eingabe:

a &$ b 
a &$ function() 
a &$ function() 
function() &$ a 
a function() &$ a 

Nur die &$ in der ersten Zeile wird mit diesem regulären Ausdruck abgeglichen.

Der reguläre Ausdruck funktioniert mit einem negativen Lookahead, um sicherzustellen, dass die Zeile die Zeichenfolge function( nicht enthält. Der Look-Ahead muss jedoch an den Anfang der Zeile gepinnt wird, weshalb die .* erforderlich ist .. Auch dies wird ein Vorkommen nur

pro Zeile passen

enter image description here

+0

Das sieht so aus, als ob es funktionieren sollte - aber VSCode fängt immer noch * alle * Vorkommen ab, auch solche mit 'function' am Anfang. Beginnen Sie zu denken, dass es sich um einen Fehler handeln könnte –

+0

Können Sie ein Beispiel für Text angeben, den Sie abgleichen möchten? Ich testete meinen einfachen Beispieltext in VSCode 1.8.1 auf einem Mac und es funktioniert (Screenshot hinzugefügt, um dies zu zeigen) –

+0

Ein Beispiel dafür, was nicht übereinstimmen sollte: 'Funktion smarty_core_assign_smarty_interface ($ params, & $ smarty)' in meinem VS Code auf MacOS, dieser * goes * wird abgeglichen. Seltsam! –

Verwandte Themen