2016-06-30 8 views
-3

Ich versuche, ein einzelnes Standalone '=' Zeichen mit einem regulären Ausdruck zu vergleichen.Regulärer Ausdruck für ein Standalone = Zeichen

Zum Beispiel für diesen Code

if(y == 5 || x = 1) { 
    Do something ... 
} 

Ich möchte die Single '=', und nicht die "==" übereinstimmen. Ich habe viele Kombinationen von Strings für reguläre Ausdrücke ausprobiert, aber ich kann immer noch keine Übereinstimmung an der richtigen Position finden.

+0

Warum verwenden Sie Regex, um Code zu analysieren? Wenn dies nicht ein sehr einfaches Werkzeug ist, wollen Sie etwas robuster. – TartanLlama

+0

Suchen Sie nach a = das ist keinem anderen vorangestellt oder folgt einem anderen =? –

+0

Wenn ich diese bestimmte Methode verwende, wird das zweite "=" im "==" Teil übereinstimmen. –

Antwort

3

Sie können dies erreichen, indem eine negative Lookbehind und eine positive Vorschau mit:

(?<!=)=(?!=) 

Beispiel: https://regex101.com/r/uV5eC5/1

Weitere Informationen über die Look-Ahead/Lookbehind, lesen Regex lookahead, lookbehind and atomic groups

+2

Wenn Ihr Regex-Parser dies unterstützt. –

+0

Danke für die Verknüpfung des Tools, das sollte funktionieren. Ich muss es nur in die C++ Regex-Syntax konvertieren. –

+0

Dies funktioniert nur mit Boost-Bibliothek oder PCRE-Bibliothek. C++ 11 Regex folgt ECMAScript regex, das Look-Behind nicht unterstützt. – nhahtdh

0

fbo-Lösung sicher ist eleganter, aber wenn es in JS getan werden muss, das keine Look-Behinds hat, könnten Sie es mit

tun
[^=]=[^=] 

Da es sich um Code zu sein scheint, den Sie überprüfen, wird immer ein Zeichen vor und nach der = sein, und daher dieser Test, dass keiner von ihnen ein anderer = ist.

+0

Sowohl Ihre Antwort als auch die nach der Konvertierung in die C++ Regex-Syntax funktionierten. –

+1

Beachten Sie, dass, wenn Sie später ersetzen möchten, auch das Symbol vor und das Symbol nach '=' ersetzen würde. Sie könnten sie also als separate Gruppen erfassen: '([^ =]) (=) ([^ =])' und dann '$ 1 == $ 3' für die Ersetzung (vorausgesetzt, Sie ersetzen' = 'mit' == '). –

Verwandte Themen