פתיחת הכוח של ביטויים רגולריים מתקדמים
ביטויים רגולריים (רגקס) מספקים כלים חזקים להתאמת דפוסים ולמניפולציה של טקסט. מאמר זה בוחן מושגי ביטוי מתקדמים המאפשרים לך להתמודד עם משימות עיבוד טקסט מסובכות בצורה מדויקת ויעילה.
קביעות מבט קדימה ומבט מאחור
קביעות מבט קדימה ו-lookbehind מאפשרות לך להתאים דפוס רק אם לפני או אחריו דפוס אחר. הם שימושיים להבטחת הקשר מבלי לכלול אותו בהתאמה.
- מבט חיובי
(?=...)
: מבטיח שהתבנית תואמת רק אם אחריה מופיע הביטוי שצוין. - מבט שלילי
(?!...)
: מבטיח שהתבנית תואמת רק אם לא עוקב אחריו הביטוי שצוין. - מבט חיובי מאחורי
(?<=...)
: מבטיח שהתבנית תואמת רק אם לפניה הביטוי שצוין. - מבט שלילי מאחורי
(?<!...)
: מבטיח שהתבנית תואמת רק אם לא קודמת לה הביטוי שצוין.
דוגמא:
(?<=Mr\.\s|Mrs\.\s)[A-Z]\w+
הביטוי הרגולרי הזה תואם לשמות שלפניהם "Mr." או "Mrs.".
דפוסים מותנים
דפוסים מותנים מאפשרים לך להתאים דפוסים שונים על סמך אם תנאי מסוים מתקיים. התחביר הוא (?(תנאי)true-pattern|false-pattern)
.
דוגמא:
(\d{3}-)?(?(1)\d{3}-\d{4}|\d{7})
הביטוי הרגולרי הזה מתאים למספרי טלפון עם או בלי קידומת חיוג.
תתי שגרות ורקורסיה
תתי שגרות ורקורסיה מאפשרים לך לעשות שימוש חוזר בדפוסים בתוך אותו ביטוי רגולרי או להתאים מבנים מקוננים. זה שימושי במיוחד עבור נתונים מורכבים ומקוננים.
דוגמא:
(?<group>\((?>[^()]+|(?&group))*\))
הביטוי הרגולרי הזה מתאים לסוגריים מאוזנים עם רמות מקוננות.
מכונות רכושיות
מכמים רכושיים מונעים ממנוע ה-Regex לחזור אחורה, מה שיכול לשפר את הביצועים כאשר אתה רוצה להבטיח שלא יתרחש מעקב לאחור.
דוגמא:
\w++
הביטוי הרגולרי הזה מתאים לרצף של תווי מילים באופן רכושני, כלומר הוא לא יוותר על תווים לאחר התאמה.
שימוש בדגלים להתאמה משופרת
דגלים רגילים משנים את התנהגות התאמת הדפוס. כמה דגלים נפוצים כוללים:
- i: התאמה לא תלוית רישיות.
- m: מצב ריבוי קווים, המשפיע על ההתנהגות של
^
ו-$
. - s: מצב Dotall, המאפשר ל-
.
להתאים לתווים בשורה חדשה. - x: התעלם מרווח לבן ואפשר הערות בתוך התבנית לצורך קריאה.
דוגמא:
/pattern/imsx
דפוס זה מחיל את המצבים חסרי רגישות לאותיות גדולות, ריבוי קווים, נקודות ומצבים מורחבים.
דוגמאות בשפות תכנות
הנה כמה דוגמאות לשימוש ב-Regex מתקדם ב-Python וב-JavaScript:
דוגמה לפייתון
import re
# Match a name preceded by Mr. or Mrs.
pattern = r'(?<=Mr\.|Mrs\.)\s[A-Z]\w+'
text = 'Mr. Smith and Mrs. Johnson'
matches = re.findall(pattern, text)
for match in matches:
print('Match found:', match)
דוגמה ל-JavaScript
// Match a name preceded by Mr. or Mrs.
const pattern = /(?<=Mr\.|Mrs\.)\s[A-Z]\w+/g;
const text = 'Mr. Smith and Mrs. Johnson';
const matches = text.match(pattern);
if (matches) {
matches.forEach(match => console.log('Match found:', match));
}
סיכום
טכניקות מתקדמות של ביטויים רגולריים כגון קביעות מבט מאחורי, תבניות מותנות, תתי שגרות, רקורסיה ומכימות רכושניות מרחיבות את היכולות של ביטוי רגולרי לעיבוד טקסט מורכב. שליטה במושגים הללו מאפשרת לך להתמודד עם משימות התאמה ומניפולציה מתוחכמות ביעילות ובדיוק גבוהים יותר.