RegExp eşleşen dizesi benim ile başlamıyor


93

PMD için, ile başlayan çirkin değişkenler konusunda beni uyaran bir kurala sahip olmak istiyorum my.
Bu benim do bütün değişkenleri kabul etmek anlamına gelir DEĞİL ile başlar my.

Bu nedenle, aşağıdaki gibi davranan bir Normal İfadeye (re) ihtiyacım var:

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

Farklı olanları denedim ama henüz çalıştırmadım.


1
Bunun aslında olumsuz bir bakış olması gerektiğini düşünüyorum (ileriye dönük olumsuz bir bakış değil).
Indrit

Yanıtlar:


43

Başkalarının önerdiği gibi ileriye dönük bir iddia kullanabilirsiniz. Veya yalnızca temel normal ifade sözdizimini kullanmak istiyorsanız:

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

Bu, sıfır veya bir karakter uzunluğundaki ( ^.?$) dizelerle eşleşir ve bu nedenle olamaz my. Veya iki veya daha fazla karakter içeren dizeler, burada ilk karakter başka karakter olmadığında mizleyebilir ( ^[^m].+); veya ilk karakter bir ise, monu a y( ^m[^y]) takip etmemelidir .


Şimdi kullanabileceğimiz şey bu. Genişletilmiş regexp ile ilgili bir sorun var gibi görünüyor, ancak bu şimdilik iyi çalışıyor.
Dominik Sandjaja

169
^(?!my)\w+$

çalışmalı.

İlk önce mydizenin başında eşleşmenin mümkün olmamasını sağlar ve ardından dizenin sonuna kadar alfanümerik karakterlerle eşleşir. Dize içinde herhangi bir yerde boşluk olması normal ifadenin başarısız olmasına neden olur. Girdinize bağlı olarak, dizeyi normal ifadeye geçirmeden önce dizenin önündeki ve arkasındaki boşlukları soymak veya normal ifadeye isteğe bağlı boşluk eşleştiricileri eklemek isteyebilirsiniz ^\s*(?!my)(\w+)\s*$. Bu durumda, geri referans 1, değişkenin adını içerecektir.

Değişken adınızın belirli bir karakter grubuyla başladığından emin olmanız gerekiyorsa [A-Za-z_],

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

Dan değişikliği Not +için *.


63
/^(?!my).*/

(?!expression)olumsuz bir bakış açısıdır; Bir pozisyon maçları expression gelmez o konumdan başlayarak maç.


7

Olumlu bir eşleşme yapmak ve bu dizeleri reddetmek - kabul edilecek dizeleri bulmak için negatifle eşleştirmek yerine, çok daha okunaklı olmaz mıydı?

/^my/

4
Bu daha kolay olurdu ANCAK bir arşive işlerken kodu kontrol eden bir kural için gerekliydi, dolayısıyla mantık "geri döndürülemezdi".
Dominik Sandjaja
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.