← כל הכלים

בודק ביטויים רגולריים

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

בודק ביטויים רגולריים: בנו ונפו דפוסים על הטקסט שלכם

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

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

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

אבני הבניין ששווה להכיר

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

מחלקות תווים מתארות קבוצה של תווים מותרים. [aeiou] תואם לכל תנועה בודדת, [0-9] תואם לספרה אחת, ו-[a-zA-Z] תואם לאות אחת. סימן קארט בתוך הסוגריים שולל את הקבוצה, כך ש-[^0-9] משמעו "כל תו שאינו ספרה". קיצורים חוסכים הקלדה: \d הוא ספרה, \w הוא תו מילה (אותיות, ספרות, קו תחתון), \s הוא רווח לבן, והנקודה . תואמת כמעט לכל תו בודד.

כמתים אומרים כמה פעמים החלק הקודם רשאי לחזור על עצמו. * משמעו אפס או יותר, + משמעו אחת או יותר, ו-? משמעו אפס או אחת (אופציונלי). לכמויות מדויקות, {3} משמעו בדיוק שלוש ו-{2,4} משמעו שתיים עד ארבע. כך \d{4} תואם לשנה בת ארבע ספרות ו-colou?r תואם לשני האיותים.

עוגנים מצמידים דפוס למיקום ולא לתו. ^ תואם לתחילת הטקסט, $ תואם לסופו, ו-\b מסמן גבול מילה. הדפוס ^Error תואם רק לשורות שמתחילות ב-"Error", וזה בדיוק מה שאתם רוצים בעת סריקת לוגים.

קבוצות עוטפות חלק מדפוס בסוגריים, גם כדי להחיל כמת על מספר תווים בבת אחת וגם כדי ללכוד את הטקסט התואם לשימוש חוזר. ב-(\d{4})-(\d{2})-(\d{2}) כל קבוצה לוכדת רכיב תאריך שתוכלו לחלץ מאוחר יותר. אלטרנציה עם קו אנכי פועלת כמו "או": cat|dog|fish תואם לכל אחת משלוש המילים.

דפוסים שאליהם באמת תגיעו

כמה משימות חוזרות מכסות את רוב העבודה האמיתית. כדי לתפוס משהו שדומה לאימייל, [\w.+-]+@[\w-]+\.[\w.-]+ הוא נקודת התחלה פרגמטית; אימות אימייל מלא לפי המפרט הפורמלי ידוע כמסובך להחריד, ודפוס רופף הוא בדרך כלל הבחירה הנכונה להדגשת מועמדים ולא לדחיית משתמשים.

עבור מספרים, \d+ תופס רצפי ספרות, בעוד -?\d+(\.\d+)? תואם למספרים שליליים ועשרוניים אופציונליים. כדי לגזום רווחים לבנים מובילים וסוגרים, התאימו ^\s+|\s+$ והחליפו בכלום. כדי למצוא מילים כפולות, דפוס ההפניה-לאחור \b(\w+)\s+\1\b תואם למילה שאחריה חזרה על עצמה, כאשר \1 מפנה בחזרה לקבוצה הראשונה שנלכדה.

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

דגלים משנים את אופן ההתאמה

דגלים הם מתגים שמשנים את הדפוס כולו. הדגל גלובלי (g) מוצא כל התאמה במקום לעצור בראשונה, וזה מה שאתם רוצים בעת הדגשת כל המופעים. הדגל לא תלוי רישיות (i) גורם ל-error להתאים גם ל-"Error" וגם ל-"ERROR". הדגל רב-שורתי (m) משנה את ^ ו-$ כך שהם תואמים לתחילת וסוף כל שורה, לא רק לטקסט כולו, מה שחיוני לעבודה שורה-אחר-שורה על לוגים. דגלים שימושיים נוספים כוללים s (dotall, המאפשר לנקודה להתאים גם למעברי שורה) ו-u לטיפול מלא ביוניקוד.

הניבים נבדלים מעט לפי שפה

ביטויים רגולריים הם משפחת ניבים, לא תקן אחד קבוע. JavaScript, Python, PCRE (PHP), Java, .NET, Go, ו-Rust מסכימים על התחביר הבסיסי שלמעלה, אבל הם נפרדים בקצוות: תמיכה ב-lookbehind, תחביר קבוצות בעלות שם ((?<name>...) לעומת (?P<name>...)), escape-ים של תכונות יוניקוד, ואילו דגלים קיימים - כל אלה משתנים. דפוס שעובד במנוע אחד עשוי לדרוש התאמה קטנה באחר, אז כדאי לבדוק מול הניב שאתם בפועל עובדים איתו. כשיש לכם דפוס מכוון, שאר כלי המפתחים שלנו וכלי הטקסט שלנו יכולים לעזור בעבודה הנלווית של ניקוי, קידוד וטרנספורמציה של הנתונים שזה עתה תאמתם.

שאלות נפוצות

האם הטקסט שלי נשלח לשרת?

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

באיזה ניב ביטוי רגולרי משתמש הכלי הזה?

הוא משתמש במנוע הביטויים הרגולריים של JavaScript המובנה בדפדפן שלכם. התחביר הבסיסי תואם למה שאתם מכירים מרוב השפות, אם כי כמה תכונות מתקדמות נבדלות מעט מ-PCRE, Python או .NET.

מה ההבדל בין התאמה גרגרנית (greedy) לעצלה (lazy)?

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

איך מתאימים תו מיוחד באופן מילולי?

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

למה הדפוס שלי לא תואם לכלום?

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

האם אפשר ללכוד חלקים מההתאמה?

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