Untuk PMD, saya ingin memiliki aturan yang memperingatkan saya tentang variabel jelek yang dimulai dengan my
.
Ini berarti saya harus menerima semua variabel yang TIDAK dimulai my
.
Jadi, saya membutuhkan RegEx (re) yang berperilaku sebagai berikut:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
Saya sudah mencoba yang berbeda tetapi belum berhasil.
regex
regex-negation
pmd
Dominik Sandjaja
sumber
sumber
Jawaban:
Anda bisa menggunakan pernyataan lookahead seperti yang disarankan orang lain. Atau, jika Anda hanya ingin menggunakan sintaks ekspresi reguler dasar:
^(.?$|[^m].+|m[^y].*)
Ini cocok dengan string yang panjangnya nol atau satu karakter (
^.?$
) dan karenanya tidak bisamy
. Atau string dengan dua atau lebih karakter di mana ketika karakter pertama bukanm
karakter lagi dapat mengikuti (^[^m].+
); atau jika karakter pertama adalah am
maka tidak boleh diikuti oleh ay
(^m[^y]
).sumber
^(?!my)\w+$
harus bekerja.
Pertama, memastikan bahwa tidak mungkin untuk mencocokkan
my
di awal string, lalu mencocokkan karakter alfanumerik hingga akhir string. Spasi kosong di mana saja dalam string akan menyebabkan regex gagal. Bergantung pada masukan Anda, Anda mungkin ingin menghapus spasi kosong di depan dan belakang string sebelum meneruskannya ke regex, atau gunakan tambahkan pencocok spasi kosong opsional ke seperti regex^\s*(?!my)(\w+)\s*$
. Dalam kasus ini, referensi latar 1 akan berisi nama variabel.Dan jika Anda perlu memastikan bahwa nama variabel Anda dimulai dengan sekelompok karakter tertentu, katakanlah
[A-Za-z_]
, gunakan^(?!my)[A-Za-z_]\w*$
Perhatikan perubahan dari
+
menjadi*
.sumber
/^(?!my).*/
(?!expression)
adalah pandangan negatif; itu cocok dengan posisi di manaexpression
tidak cocok mulai dari posisi itu.sumber
Bukankah akan jauh lebih mudah dibaca untuk melakukan pencocokan positif dan menolak string tersebut - daripada mencocokkan negatif untuk menemukan string untuk diterima?
/^my/
sumber