דילוג לתוכן המרכזי
מודול 6 · שיעור 1 מתוך 421/32 בקורס~10 min
שיעורי מודול (1/4)

מבט חיובי: `(?=...)`

מבט חיובי (?=...) הוא קביעה ברוחב אפסי: הוא בודק שדפוס מסוים עוקב אחר המיקום הנוכחי, אבל ** כן לא לצרוך** את התווים האלה.

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

ההסתכלות קדימה (?= euro) דורשת שאחרי הספרות יופיע euro, אבל ההתאמה כוללת רק את הספרות. 75 dollari אינו תואם (לא euro).

למה "רוחב אפס"

חשבו על ההסתכלות קדימה כעל תנאי בעמדה, לא כעל חלק מהמשחק:

  • המשחק נפסק לפני המבט קדימה.
  • המיקום "אחרי המשחק" הוא ההתחלה של הטקסט שנבדק על ידי המבט קדימה.
  • ניסיון המשחק הבא עם הדגל g יתחדש משם.

זה הופך אותו למושלם עבור חילוץ ערכים ללא ההקשר שלהם: מחירים ללא המטבע, מילים לפני סימן פיסוק וכן הלאה.

תכונות מבט קדימה וסריקה ברוחב אפס

נקודת מבט חיובית (?=...) מבטיחה שהתבנית שצוינה עוקבת אחר הנקודה הנוכחית, אך הסריקה מתחדשת מהמיקום שלפני ההסתכלות. זה מונע "צריכה" של חלקים מהטקסט שעשויים להיות נחוצים עבור התאמות עוקבות.

נסה את זה

פעילות גופנית#regex.m6.l1.e1
ניסיונות: 0טוען...

חלץ רק את הספרות של מחירי האירו (רצפי הספרות ואחריהם 'אירו'). אין מטבע במשחק.

טוען עורך...
הצג רמז

העבר 'אירו' בתוך מבט קדימה (?= יורו): המחרוזת לא תהיה חלק מהמשחק.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#regex.m6.l1.e2
ניסיונות: 0טוען...

מצא כל מילה מיד אחריה נקודתיים `:` (אך מבלי לכלול את הנקודתיים בהתאמה).

טוען עורך...
הצג רמז

אותו היגיון: ה-`:` אינו בהתאמה, אבל זה תנאי מיקום.

הפתרון זמין לאחר 3 ניסיונות

אתגר נוסף

פעילות גופנית#regex.m6.l1.e3
ניסיונות: 0טוען...

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

טוען עורך...
הצג רמז

הזז את \\( (נמלט מסוגריים פתוחים) בתוך המבט החיובי (?=...).

הפתרון זמין לאחר 3 ניסיונות