Hangi normal ifade operatörü bu karakterle eşleşmeyen anlamına gelir?


Yanıtlar:


92

Belirli karakterleri hariç tutmak için olumsuzlanmış karakter sınıflarını kullanabilirsiniz: örneğin [^abcde], a, b, c, d, e karakterleri dışında herhangi bir şeyle eşleşir.

Tüm karakterleri kelimenin tam anlamıyla belirtmek yerine, karakter sınıfları içinde stenoları kullanabilirsiniz : [\w](küçük harf) herhangi bir "kelime karakteriyle" (harf, sayılar ve alt çizgi) [\W]eşleşir , (büyük harf) kelime karakterleri dışında herhangi bir şeyle eşleşir; benzer şekilde, [\d]0-9 basamakla eşleşirken 0-9 basamak dışında [\D]herhangi bir şeyle eşleşir vb.

PHP kullanıyorsanız, regex karakter sınıfları belgelerine göz atabilirsiniz .


82

"Eşleşmiyor" demenin iki yolu vardır: karakter aralıkları ve sıfır genişlikli negatif ileri / geri bak.

Eski: uyuşmuyor a, b, cveya 0:[^a-c0]

İkincisi: foove dışındaki herhangi bir üç harfli dizeyle eşleşir bar:

(?!foo|bar).{3}

veya

.{3}(?<!foo|bar)

Ayrıca, sizin için bir düzeltme: *, ?ve +aslında bir şey uymuyor. Tekrarlama operatörleri ve her zaman eşleşen bir operatörü takip ederler. Böylece, a+araç birini veya daha fazlasını maç a, [a-c0]+araçlar biriyle eşleşen veya daha fazla a, b, cveya 0, ise [^a-c0]+bir maç olur ya da daha fazla bir şey olmadığını a, b, cveya 0.



49

[^] ( [] içinde ) olumsuzluk normal ifadede iken ^"dizenin başlangıcı"

[^a-z]"a" ile "z" arasında olmayan herhangi bir tek karakterle eşleşir

^[a-z] dizenin "a" ile "z" ile başladığı anlamına gelir

Referans


9

^ bir karakter aralığının veya negatif ileri / geri bakma iddialarının başında kullanılır.

>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>

?!Son 2 örnekte kullanmak zorunda mısın yoksa tek !başına kullanabilir misin? Orada ?ne var?
saat

Python'un ?bir uzantı olduğunu söylemek için buna ihtiyacı var. Diğer normal ifade motorlarının kendi kuralları olabilir.
Ignacio Vazquez-Abrams

@Click: Oldukça standart. normal-expressions.info/refadv.html , ayrıca çoğu regexp motor kılavuzları aynı şeyi söyler.
Amadan
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.