web-dev-qa-db-ja.com

正規表現に一致する文字列がmyで始まっていない

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

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

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

私は別のものを試しました(後でそれらをリストします、申し訳ありませんが、今はアクセスできません)が、まだ機能していません。

73

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

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

これは、ゼロまたは1文字の長さ(^.?$)の文字列に一致するため、myにはできません。または、最初の文字がmでない場合、2つ以上の文字が続く文字列(^[^m].+);または、最初の文字がmである場合、y^m[^y])が後に続くことはできません。

35
Gumbo
^(?!my)\w+$

動作するはずです。

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

変数名が特定の文字グループ([A-Za-z_]など)で始まることを確認する必要がある場合は、

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

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

141
Tim Pietzcker
/^(?!my).*/

(?!expression)は負の先読みです。 expressiondoes n'tがその位置から始まる位置に一致します。

47
Amber

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

/^my/
5
Victor Bruno