צולל עמוק יותר לתוך ביטויים רגולריים מתקדמים

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

קביעות מבט מתקדמות

הצהרות מבט סביב מאפשרות לך להתאים דפוס רק אם לפניה או אחריה דפוס אחר, מבלי לכלול את הטקסט שמסביב בהתאמה.

  • מבט חיובי (?=...): מבטיח שהתבנית תואמת רק אם אחריה מופיע הביטוי שצוין.
  • מבט שלילי (?!...): מבטיח שהתבנית תואמת רק אם לא עוקב אחריו הביטוי שצוין.
  • מבט חיובי מאחורי (?<=...): מבטיח שהתבנית תואמת רק אם לפניה הביטוי שצוין.
  • מבט שלילי מאחורי (?<!...): מבטיח שהתבנית תואמת רק אם לא קודמת לה הביטוי שצוין.

דוגמא:

(?<=\$)\d+

הביטוי הרגולרי הזה תואם למספרים שלפניהם סימן דולר.

קבוצות אטומיות

קבוצות אטומיות מונעות חזרה לאחור ברגע שנעשה ניסיון התאמה בתוך הקבוצה. הם שימושיים לשיפור הביצועים על ידי הימנעות מחזרה מיותרת.

דוגמא:

(?>\d+)\b

הביטוי הרגולרי הזה תואם רצף של ספרות כקבוצה אטומית, ומונע חזרה לאחור.

הפניות לאחור

הפניות לאחור מאפשרות לך לעשות שימוש חוזר בקבוצה שנלכדה בעבר בדפוס הרקס שלך. זה שימושי עבור התאמת מחרוזות משנה חוזרות.

דוגמא:

(\b\w+)\s+\1

הביטוי הרגולרי הזה תואם מילה שלאחריה אותה מילה.

קבוצות בשם

קבוצות בעלות שם מאפשרות לך להקצות שמות לקבוצות לכידה, מה שהופך את הביטוי הרגולרי שלך לקריאה יותר ואת הנתונים התואמים לקלים יותר להתייחסות.

דוגמא:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

הביטוי הרגולרי הזה תואם תאריכים בפורמט YYYY-MM-DD ומעניק שמות לקבוצות השנה, החודשים והימים.

דפוסים רקורסיביים

תבניות רקורסיביות מאפשרות לביטוי רגיל להתאים למבנים מקוננים, כגון סוגריים מאוזנים. זוהי תכונה מתקדמת הנתמכת על ידי מנועי רגקס מסוימים.

דוגמא:

\((?>[^()]+|(?R))*\)

הביטוי הרגולרי הזה תואם סוגריים מאוזנים.

שימוש ב-Regex בשפות תכנות שונות

Regex נתמך בשפות תכנות רבות, לעתים קרובות עם שינויים קלים בתחביר וביכולות. להלן דוגמאות ב-Python וב-JavaScript:

דוגמה לפייתון

import re

# Match a word followed by the same word
pattern = r'(\b\w+)\s+\1'
text = 'hello hello world'
match = re.search(pattern, text)

if match:
    print('Match found:', match.group())
else:
    print('No match found')

דוגמה ל-JavaScript

// Match a word followed by the same word
const pattern = /(\b\w+)\s+\1/;
const text = 'hello hello world';
const match = text.match(pattern);

if (match) {
    console.log('Match found:', match[0]);
} else {
    console.log('No match found');
}

סיכום

מושגי ביטוי רגולרי מתקדמים כמו קביעות מבט, קבוצות אטומיות, הפניות לאחור, קבוצות בשמות ודפוסים רקורסיביים יכולים לשפר משמעותית את יכולות עיבוד הטקסט שלך. על ידי שליטה בטכניקות אלו, תוכל להתמודד עם משימות התאמה ומניפולציה מורכבות ביעילות ובדיוק גבוהים יותר.