117

PMD の場合、 で始まる醜い変数を警告するルールが必要ですmy
これは、で始まらないすべての変数を受け入れる必要があることを意味しますmy

したがって、次のように動作する RegEx (re) が必要です。

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true

いろいろ試しましたが、まだうまくいきません。

4

4 に答える 4

202
^(?!my)\w+$

動作するはずです。

最初に、文字列の先頭で一致できないことを確認してからmy、文字列の末尾まで英数字を一致させます。文字列内のどこかに空白があると、正規表現が失敗します。入力によっては、正規表現に渡す前に文字列の前後の空白を削除するか、オプションの空白マッチャーを正規表現に追加することをお勧めします^\s*(?!my)(\w+)\s*$。この場合、後方参照 1 には変数の名前が含まれます。

また、変数名が特定の文字グループで始まることを確認する必要がある場合は、たとえば[A-Za-z_]を使用します

^(?!my)[A-Za-z_]\w*$

+からへの変更に注意してください*

于 2010-01-22T09:48:41.723 に答える
77
/^(?!my).*/

(?!expression)ネガティブな先読みです。その位置から開始して一致expression しない位置に一致します。

于 2010-01-22T09:49:35.920 に答える
47

他の人が提案したように、先読みアサーションを使用することもできます。または、基本的な正規表現構文を使用したいだけの場合:

^(.?$|[^m].+|m[^y].*)

これは、長さが 0 または 1 文字 ( ^.?$) であり、したがってmy. または、最初の文字が ではない場合、2 つ以上の文字を含む文字列m( ^[^m].+); または、最初の文字が a の場合、その後に( )mを続けてはなりません。y^m[^y]

于 2010-01-22T10:09:43.867 に答える
9

受け入れる文字列を見つけるために否定的な一致を見つけるよりも、肯定的な一致を行ってそれらの文字列を拒否する方がはるかに読みやすいと思いませんか?

/^my/
于 2011-09-12T16:34:27.500 に答える