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.