*, ?, +karakterlerin tümü bu karakterle eşleştiği anlamına gelir. Hangi karakter bununla uyuşmama anlamına gelir? Örnekler yardımcı olabilir.
*, ?, +karakterlerin tümü bu karakterle eşleştiği anlamına gelir. Hangi karakter bununla uyuşmama anlamına gelir? Örnekler yardımcı olabilir.
Yanıtlar:
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 .
"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.
^((?!foo).)+$Foo regex101.com/r/z6a65l/4
^ 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?
?bir uzantı olduğunu söylemek için buna ihtiyacı var. Diğer normal ifade motorlarının kendi kuralları olabilir.