Für PMD hätte ich gerne eine Regel, die mich vor den hässlichen Variablen warnt, die mit beginnen my
.
Dies bedeutet, dass ich alle Variablen akzeptieren muss, die NICHT mit beginnen my
.
Ich brauche also ein RegEx (re), das sich wie folgt verhält:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
Ich habe verschiedene ausprobiert, aber noch nicht funktioniert.
regex
regex-negation
pmd
Dominik Sandjaja
quelle
quelle
Antworten:
Sie können entweder eine Lookahead-Behauptung verwenden, wie andere vorgeschlagen haben. Oder wenn Sie nur die grundlegende Syntax für reguläre Ausdrücke verwenden möchten:
Dies entspricht Zeichenfolgen, die entweder null oder ein Zeichen lang sind (
^.?$
) und daher nicht sein könnenmy
. Oder Zeichenfolgen mit zwei oder mehr Zeichen, bei denen, wenn das erste Zeichenm
kein weiteres Zeichen ist, weitere Zeichen folgen können (^[^m].+
); oder wenn das erste Zeichen a istm
, darf keiny
(^m[^y]
) folgen .quelle
sollte arbeiten.
Zunächst wird sichergestellt, dass
my
am Anfang der Zeichenfolge keine Übereinstimmung möglich ist , und anschließend werden alphanumerische Zeichen bis zum Ende der Zeichenfolge abgeglichen. Leerzeichen an einer beliebigen Stelle in der Zeichenfolge führen dazu, dass der reguläre Ausdruck fehlschlägt. Abhängig von Ihrer Eingabe möchten Sie möglicherweise entweder Leerzeichen an der Vorder- und Rückseite der Zeichenfolge entfernen, bevor Sie sie an den regulären Ausdruck übergeben, oder optionale Leerzeichen-Matcher zum regulären Ausdruck hinzufügen^\s*(?!my)(\w+)\s*$
. In diesem Fall enthält die Rückreferenz 1 den Namen der Variablen.Und wenn Sie sicherstellen müssen, dass Ihr Variablenname mit einer bestimmten Gruppe von Zeichen beginnt
[A-Za-z_]
, verwenden Sie beispielsweiseBeachten Sie den Wechsel von
+
zu*
.quelle
(?!expression)
ist ein negativer Lookahead; Es entspricht einer Position, anexpression
der ab dieser Position nicht mehr übereinstimmt.quelle
Wäre es nicht wesentlich besser lesbar, eine positive Übereinstimmung zu erzielen und diese Zeichenfolgen abzulehnen, anstatt mit der negativen übereinzustimmen, um zu akzeptierende Zeichenfolgen zu finden?
quelle