Ana içeriğe geç
Modül 6 · Ders 1 ders 4Kurstaki 21/32~10 min
Modül dersleri (1/4)

Olumlu bakış: `(?=...)`

pozitif bakış açısı (?=...) sıfır genişlikli bir iddiadır: belirli bir modelin geçerli konumu takip edip etmediğini kontrol eder, ancak ** bu karakterleri tüketmeyin**.

Code
Pattern: \d+(?= euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                ^^^                 ^^

(?= euro) ön izlemesi, rakamların ardından euro gelmesini gerektirir, ancak maç yalnızca rakamları içerir. 75 dollari eşleşmiyor (euro yok).

Neden "sıfır genişlik"

İleriye bakmayı konumla ilgili bir koşul olarak düşünün, bir durum olarak değil maçın bir kısmı:

  • Maç, önden önce durur.
  • "Maçtan sonraki" konum, ileri görüşlü tarafından incelenen metnin başlangıcıdır.
  • g bayrağıyla bir sonraki maç denemesine buradan devam edilecektir.

Bu onu bağlamları olmadan değerlerin çıkarılması için mükemmel kılar: fiyatlar para birimi olmadan, noktalama işaretinden önceki kelimeler vb.

İleriye dönük özellikler ve sıfır genişlikli tarama

Pozitif bakış (?=...), belirtilen modelin geçerli noktayı takip ettiğini garanti eder, ancak tarama, önden önceki konumdan devam eder. Bu, sonraki eşleşmeler için gerekli olabilecek metnin bazı bölümlerinin "tüketilmesini" önler.

Deneyin

Egzersiz#regex.m6.l1.e1
Denemeler: 0Yükleniyor…

YALNIZCA euro fiyatlarının rakamlarını çıkarın (ardından 'euro' gelen rakam dizileri). Maçta para birimi yok.

Düzenleyici yükleniyor…
İpucu göster

'Euro'yu ileriye dönük (?= euro) içine taşıyın: dize eşleşmenin bir parçası olmayacaktır.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#regex.m6.l1.e2
Denemeler: 0Yükleniyor…

Hemen ardından iki nokta üst üste `:` gelen her kelimeyi bulun (ancak eşleşmeye iki nokta üst üste eklemeden).

Düzenleyici yükleniyor…
İpucu göster

Aynı mantık: `:` eşleşmede değil ama bir konum koşuludur.

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#regex.m6.l1.e3
Denemeler: 0Yükleniyor…

Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.

Düzenleyici yükleniyor…
İpucu göster

\\( (açık parantezden kaçtı) pozitif bakış açısının (?=...) içine taşıyın.

3 denemeden sonra çözüm mevcut