JavaRush /בלוג Java /Random-HE /RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים. חלק 1
Artur
רָמָה
Tallinn

RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים. חלק 1

פורסם בקבוצה
המקור של מאמר זה נמצא כאן . כנראה שאין דבר כזה יותר מדי תיאוריה, ואני אספק כמה קישורים לחומר מפורט יותר על regex בסוף המאמר. אבל נראה לי שלתחיל להתעמק בנושא כמו ביטויים רגילים יהיה הרבה יותר מעניין אם תהיה הזדמנות לא רק לדחוס, אלא גם לגבש ידע מיד על ידי השלמת משימות קטנות בדרך. RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 1בואו נתחיל. בדרך כלל מתנגדים לשימוש בביטויים רגולריים ('RegEx' או פשוט 'regex') בתכנות מצטטים את הציטוט הבא, המיוחס לג'יימי זווינסקי: "יש אנשים, כאשר הם מתמודדים עם בעיה, חושבים, 'אני יודע, אני אשתמש בביטויים רגולריים'. "עכשיו יש להם שתי בעיות". למעשה, שימוש בביטויים רגולריים הוא עדיין לא רעיון טוב או רע. וזה כשלעצמו לא יוסיף בעיות ולא יפתור אף אחת מהן. זה רק כלי. והאופן שבו אתה משתמש בו (נכון או לא) קובע אילו תוצאות תראה. אם תנסה להשתמש ב-Regex, למשל, כדי ליצור מנתח HTML, סביר להניח שתחווה כאב . אבל אם אתה רק רוצה לחלץ, למשל, חותמות זמן משורות מסוימות, כנראה שתהיה בסדר. כדי להקל עליך לשלוט בביטויים רגולריים, ריכזתי את השיעור הזה שיעזור לך לשלוט בביטויים רגולריים מאפס בעשרים צעדים קצרים בלבד. הדרכה זו מתמקדת בעיקר במושגים הבסיסיים של ביטויים רגולריים ומתעמקת בנושאים מתקדמים יותר רק לפי הצורך.

שלב 1: מדוע להשתמש בביטויים רגולריים

RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 2ביטויים רגולריים משמשים לחיפוש התאמות בטקסט באמצעות דפוסים (דפוסים) שצוינו. באמצעות regex, אנו יכולים בקלות ובפשטות לחלץ מילים מטקסט, כמו גם תווים מילוליים ומטא בודדים והרצפים שלהם העומדים בקריטריונים מסוימים. הנה מה שוויקיפדיה מספרת לנו עליהם : ביטויים רגולריים הם שפה רשמית לחיפוש ולמניפולציה של מחרוזות משנה בטקסט, המבוססת על שימוש בתווים מטא (תווים כלליים). לחיפוש נעשה שימוש במחרוזת לדוגמה (תבנית אנגלית, ברוסית היא נקראת לעתים קרובות "תבנית", "מסכה"), המורכבת מסמלים ומטא-סמלים ומגדירה את כלל החיפוש. כדי לתמרן טקסט, צוינה בנוסף מחרוזת החלפה, שיכולה להכיל גם תווים מיוחדים. התבנית יכולה להיות פשוטה כמו המילה dogבמשפט הזה:
השועל החום המהיר קופץ מעל הכלב העצלן.
הביטוי הרגולרי הזה נראה כך:
כֶּלֶב
...קל מספיק, לא? התבנית יכולה להיות גם כל מילה המכילה את האות o. ביטוי רגולרי למציאת דפוס כזה עשוי להיראות כך:
\ וואו * _
( אתה יכול לנסות את הביטוי הרגולרי הזה כאן .) אתה תבחין שככל שדרישות ה"התאמה" הופכות מורכבות יותר, הביטוי הרגולרי גם הופך מורכב יותר. ישנן צורות נוספות של סימון לציון קבוצות של תווים והתאמת תבניות חוזרות, אותן אסביר להלן. אבל ברגע שאנו מוצאים התאמה לתבנית בטקסט כלשהו, ​​אז מה נוכל לעשות איתה? מנועי ביטוי רגולרי מודרניים מאפשרים לך לחלץ תווים או רצפים של תווים (מחרוזות משנה) מטקסט כלול, או להסיר אותם, או להחליף אותם בטקסט אחר. באופן כללי, ביטויים רגולריים משמשים לניתוח ולטפל בטקסט. אנחנו יכולים לחלץ, למשל, מחרוזות משנה שנראות כמו כתובות IP ואז לנסות לאמת אותן. או שנוכל לחלץ שמות וכתובות דואר אלקטרוני ולאחסן אותם במסד נתונים. לחלופין, השתמש בביטויים רגולריים כדי למצוא מידע רגיש (כגון מספרי דרכון או מספרי טלפון) באימיילים ולהתריע בפני המשתמש שהם עלולים לסכן את עצמו. Regex הוא באמת כלי רב-תכליתי שקל ללמוד אך קשה לשלוט בו: "כמו שיש הבדל בין לנגן קטע מוזיקלי טוב לבין יצירת מוזיקה, יש הבדל בין הכרת ביטויים רגולריים לבין הבנתם." - ג'פרי א.פ. פרידל, שליטה בביטויים רגולריים

שלב 2: סוגריים מרובעים[]

הביטויים הרגולריים הפשוטים ביותר שקל להבין הם אלו שפשוט מחפשים התאמה של תו אחר תו בין תבנית הביטוי הרגולרי למחרוזת היעד. בוא ננסה, למשל, למצוא חתול: RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 3
דפוס: חתול
מחרוזת: החתול נחתך כשהוא רץ מתחת למכונית.
תואם:      ^^^
( איך זה עובד בפועל - ראה כאן ) NB! כל הפתרונות מוצגים כאן כפתרונות אפשריים בלבד. בביטויים רגולריים, כמו בתכנות בכלל, אפשר לפתור את אותן בעיות בדרכים שונות. עם זאת, בנוסף להשוואה קפדנית של תו אחר תו, אנו יכולים גם לציין התאמות חלופיות באמצעות סוגריים מרובעים:
דפוס: ca[rt]
מחרוזת: החתול נחתך כשהוא רץ מתחת למכונית.
תואם:      ^^^ ^^^
( איך זה עובד ) פתיחה וסגירה של סוגריים מרובעים אומרים למנוע הביטוי הרגיל שהוא צריך להתאים לכל אחד מהתווים שצוינו, אבל רק לאחד. הביטוי הרגולרי לעיל לא ימצא, למשל, את cartכל המילה, אלא ימצא רק חלק ממנה:
דפוס: ca[rt]
מחרוזת: החתול נחתך כשהוא רץ מתחת לעגלה.
תואם:      ^^^ ^^^
( איך זה עובד ) כאשר אתה משתמש בסוגריים מרובעים, אתה אומר למנוע הביטוי הרגיל להתאים רק לאחד מהתווים הכלולים בסוגריים. המנוע מוצא את הדמות c, ואז את הדמות a, אבל אם הדמות הבאה היא לא rאו t, אז זו לא התאמה מלאה. אם הוא מוצא ca, ואז או r, או t, הוא מפסיק. זה לא ינסה להתאים תווים נוספים מכיוון שהסוגריים המרובעים מציינים שצריך להתאים רק אחד מהתווים הכלולים. כאשר הוא מוצא ca, הוא מוצא rבמילה הבא cart, ומפסיק כי הוא כבר מצא התאמה לרצף car.

מטרות האימון:

כתוב ביטוי רגולרי התואם את כל 10 התבניות hadבקטע Hadזה של משחקי מילים בלתי ניתנים לתרגום בניב המקומי:
תבנית:
מחרוזת: ג'ים, היכן שביל היה "היה" , היה "היה לו" . "היה לו" היה נכון.
תואם:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( ראה פתרון אפשרי כאן ) מה לגבי כל שמות החיות במשפט הבא?
תבנית:
מחרוזת: עטלף, חתול וחולדה נכנסו לבר...
תואם:    ^^^ ^^^ ^^^
( פתרון אפשרי ) או אפילו יותר פשוט: מצא את המילים barאו bat:
תבנית:
מחרוזת: עטלף, חתול וחולדה נכנסו לבר...
תואם:    ^^^ ^^^
( פתרון אפשרי ) עכשיו כבר למדנו איך לכתוב ביטויים רגולריים מורכבים יותר או פחות, ואנחנו רק בשלב 2! בוא נמשיך!

שלב 3: רצפי בריחה

RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 4בשלב הקודם, למדנו על סוגריים מרובעים []וכיצד הם עוזרים לנו למצוא התאמות חלופיות באמצעות מנוע הרקס. אבל מה אם נרצה למצוא התאמות בצורה של סוגריים מרובעים פתוחים וסגורים עצמם []? כאשר רצינו למצוא התאמה בין תו אחר תו של המילה cat, סיפקנו למנוע הרקסים את רצף התווים הזה ( cat). בואו ננסה למצוא סוגריים מרובעים []באותו אופן:
דפוס: [] 
מחרוזת: אינך יכול להתאים [] באמצעות ביטוי רגולרי! אתה תצטער על זה!
התאמות: 
( בואו נראה מה קרה ) משהו לא עבד, עם זאת... הסיבה לכך היא שתווים בסוגריים מרובעים פועלים כתווים מיוחדים של מנוע regex המשמשים בדרך כלל לציון משהו אחר, ואינם תבנית מילולית שתתאים להם עצמם. כפי שאנו זוכרים משלב 2, הם משמשים למציאת התאמות חלופיות כך שמנוע ה-Regex יכול להתאים לכל אחת מהתווים הכלולים ביניהם. אם לא תכניס תווים ביניהם, זה עלול לגרום לשגיאה. כדי להתאים את הדמויות המיוחדות הללו, עלינו לברוח מהן על-ידי הקדמתן עם תו נטוי אחורי \. סלאש אחורי (או קו נטוי) הוא דמות מיוחדת נוספת שאומרת למנוע הרקסים לחפש את הדמות הבאה פשוטו כמשמעו, במקום להשתמש בה כתו מטא. מנוע הביטוי הרגולרי יחפש רק דמויות [, ופשוטו ]כמשמעו אם לפני שתיהן יש קו נטוי אחורי:
תבנית: \[\]
מחרוזת: אתה לא יכול להתאים [] באמצעות ביטוי רגולרי! אתה תצטער על זה!
תואמים:                  ^^ 
( בואו נראה מה קרה הפעם ) בסדר, מה אם אנחנו רוצים למצוא את ההסתער עצמו? התשובה פשוטה. מכיוון \שהוא גם דמות מיוחדת, צריך גם לברוח ממנו. אֵיך? מַהֲלָך סְרָק!
תבנית: \\
מחרוזת: C:\Users\Tanja\Pictures\Dogs
תואמים:    ^ ^ ^ ^
( אותה דוגמה בפועל ) יש להקדים רק תווים מיוחדים באחור. כל שאר התווים מתפרשים מילולית כברירת מחדל. לדוגמה, הביטוי הרגולרי tתואם רק tאותיות קטנות:
דפוס: t
מחרוזת: tttt
תואמים: ^ ^ ^ ^
( דוגמה ) עם זאת, רצף זה \tעובד אחרת. זוהי תבנית לחיפוש תו טאב:
דפוס: \t
מחרוזת: tttt
תואמים:   ^ ^ ^
( דוגמה ) כמה רצפי בריחה נפוצים כוללים \n(מעברי שורה בסגנון UNIX) ו \r(בשימוש במעברי שורה בסגנון Windows \r\n). \rהוא תו "החזרת כרכרה" והוא \nתו "הזנת שורה", שניהם הוגדרו יחד עם תקן ASCII כאשר מכונות טלפון עדיין היו בשימוש נרחב. רצפי בריחה נפוצים אחרים יכוסו בהמשך הדרכה זו.

בינתיים, בואו נחזק את החומר עם כמה חידות פשוטות:

נסה לכתוב ביטוי רגולרי כדי למצוא... ביטוי רגולרי ;) התוצאה צריכה להיות משהו כזה:
תבנית:
מחרוזת: ...להתאים את הביטוי הרגולרי הזה ` \[\] ` עם הביטוי הרגולרי?
תואם:                       ^^^^	
( פתרון ) הצלחת? כל הכבוד! כעת נסה ליצור ביטוי רגולרי כדי לחפש רצפי בריחה כמו זה:
תבנית:
מחרוזת: ` \r `, ` \t ` ו- ` \n ` הם כולם רצפי בריחה של ביטויים רגילים.
תואם:   ^^ ^^ ^^
( פתרון )

שלב 4: חפש "כל" תו באמצעות נקודה.

RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 5בעת כתיבת פתרונות התאמת רצף הבריחה שראינו בשלב הקודם, אולי תהיתם, "האם אני יכול להתאים את דמות האלכסון האחורי ולאחר מכן כל דמות אחרת שאחריה?"... כמובן שאפשר! ישנו תו מיוחד נוסף המשמש להתאמה (כמעט) לכל תו - תו הנקודה (נקודה). הנה מה שזה עושה:
תבנית: .
מחרוזת: אני מצטער, דייב. אני חושש שאני לא יכול לעשות את זה.
תואם: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( דוגמה ) אם אתה רוצה להתאים רק דפוסים שנראים כמו רצפי בריחה, אתה יכול לעשות משהו כזה:
תבנית: \\. 
מחרוזת: היי Walmart הוא הנכד שלי שם השם שלו הוא " \n \r \t ".
תואם:                                              ^^ ^^ ^^	
( דוגמה ) וכמו בכל התווים המיוחדים, אם אתה רוצה להתאים מילה מילולית ., אז אתה צריך להקדים אותו עם תו \:
תבנית: \. 
מחרוזת: מלחמה היא שלום . חירות היא עבדות . בורות היא חוזק . 
תואמים:             ^ ^ ^
( דוגמא )

שלב 5: טווחי תווים

RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 6מה אם אתה לא צריך שום סמל, אלא רק רוצה למצוא אותיות בטקסט? או מספרים? או תנועות? חיפוש לפי כיתות אופי והטווחים שלהן יאפשר לנו להשיג זאת.
` \n `, ` \r ` ו- ` \t ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .	
תווים הם "רווח לבן" אם הם לא יוצרים סימן גלוי בטקסט. רווח " " הוא רווח, מעבר שורה או טאב. נניח שאנו רוצים למצוא רצפי בריחה המייצגים רק תווים לבן \n, \rובקטע \tשלמעלה, אך לא רצפי בריחה אחרים. איך יכולנו לעשות את זה?
תבנית: \\[nrt] 
מחרוזת: ` \n `, ` \r ` ו- ` \t ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואם:   ^^ ^^ ^^	
( דוגמה ) זה עובד, אבל זה לא פתרון אלגנטי במיוחד. מה אם מאוחר יותר נצטרך להתאים את רצף הבריחה לתו "הזנת טופס", \f? (סמל זה משמש לציון מעברי עמודים בטקסט.)
תבנית: \\[nrt] 
מחרוזת: ` \n `, ` \r `, ` \t ` ו- ` \f ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואם:   ^^ ^^ ^^	
( פתרון לא עובד ) בגישה זו, עלינו לרשום בנפרד כל אות קטנה שאנו רוצים להתאים, בסוגריים מרובעים. דרך קלה יותר לעשות זאת היא להשתמש בטווחי תווים כדי להתאים לכל אות קטנה:
תבנית: \\[az] 
מחרוזת: ` \n `, ` \r `, ` \t ` ו- ` \f ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואם:   ^^ ^^ ^^ ^^	
( וזה כבר עובד ) טווחי תווים עובדים כפי שניתן לצפות, בהינתן הדוגמה למעלה. מקם סוגריים מרובעים סביב האות הראשונה והאחרונה שברצונך להתאים, עם מקף ביניהם. לדוגמה, אם תרצה למצוא רק "קבוצות" של קו נטוי אחורי \ואות אחת מ- ato m, תוכל לעשות את הפעולות הבאות:
דפוס: \\[am] 
מחרוזת: ` \n `, ` \r `, ` \t ` ו- ` \f ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואמים:                         ^^	
( דוגמה ) אם ברצונך להתאים טווחים מרובים, פשוט מקם אותם מקצה לקצה בין סוגריים מרובעים:
תבנית: \\[a-gq-z] 
מחרוזת: ` \n `, ` \r `, ` \t ` ו- ` \f ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואם:         ^^ ^^ ^^	
( דוגמה ) טווחי תווים נפוצים אחרים כוללים: A-Zו0-9

בואו ננסה אותם בפועל ונפתור כמה בעיות:

מספרים הקסדצימליים יכולים להכיל ספרות 0-9וגם אותיות A-F. כאשר משתמשים בהם לציון צבעים, קודים הקסדצימליים יכולים להכיל לכל היותר שלושה תווים. צור ביטוי רגולרי כדי למצוא קודים הקסדצימליים חוקיים ברשימה הבאה:
תבנית:
מחרוזת: 1H8 4E2 8FF 0P1 T8B 776 42B G12
תואם:      ^^^ ^^^ ^^^ ^^^	
( פתרון ) באמצעות טווחי תווים, צור ביטוי רגולרי שיבחר רק עיצורים קטנים (לא תנועות, כולל y) במשפט למטה:
תבנית:מחרוזת 
: כל מה שכתוב בכול , בכול . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  _ _ _ _
מתאים:   ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^^^ ^ ^^	
( פתרון )

שלב 6: "לא", קרט, circumflex, caret... סמל^

RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים.  חלק 1 - 7באמת, יש יותר מ-9000 שמות לסמל הזה :) אבל, למען הפשטות, אולי נתמקד ב"לא". הפתרון שלי לבעיה האחרונה הוא קצת ארוך. נדרשו 17 תווים כדי לומר "קבל את כל האלפבית חוץ מהתנועות". כמובן שיש דרך קלה יותר לעשות זאת. הסימן "לא" ^מאפשר לנו לציין תווים וטווחי תווים שאסור להם להתאים לאלו שצוינו בתבנית. פתרון פשוט יותר לבעיה האחרונה למעלה הוא למצוא תווים שאינם מייצגים תנועות:
תבנית : [ ^ aeiou ] מחרוזת 
:   הכול יופיע בכל האפשרויות . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
תואם: ^^ ^^ ^^^^ ^^^^ ^^ ^^^ ^ ^^ ^ ^^^^^^ ^^^^^^ ^^^ 	
( דוגמה ) הסימן "לא" ^בתור התו השמאלי ביותר בתוך הסוגריים המרובעים []אומר למנוע הביטוי הרגולרי להתאים תו אחד (כל שהוא) שאינו בסוגריים המרובעים. המשמעות היא שהביטוי הרגולרי שלמעלה מתאים גם לכל הרווחים, הנקודה ., הפסיק ,והאותיות Tבתחילת המשפט. כדי לא לכלול אותם, אנחנו יכולים גם לשים אותם בסוגריים מרובעים:
תבנית : [ ^ aeiou . , T ] מחרוזת  
: הרצונות בכל הרשומות , כל אלה . _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
מתאים:   ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^^^ ^ ^^	
( דוגמא ) הערהשבמקרה זה, אין צורך לברוח מהתקופה עם קו נטוי, כפי שעשינו בעבר כשחיפשנו אותה מבלי להשתמש בסוגריים מרובעים. תווים מיוחדים רבים בסוגריים מרובעים מטופלים באופן מילולי, כולל תו הסוגריים הפתוחים [- אך לא הסוגרים - ](תוכלו לנחש מדוע?). גם תו הנטוי האחורי \אינו מתפרש מילולית. אם אתה רוצה להתאים קו נטוי מילולי \באמצעות סוגריים מרובעים, עליך להימלט ממנו על ידי הקדמתו לאחור הבא \\. התנהגות זו תוכננה כך שניתן למקם גם תווי רווח לבן בסוגריים מרובעים לצורך התאמה:
דפוס: [\t]
מחרוזת: tttt
תואמים:   ^ ^ ^
( דוגמה ) הסימן "לא" ^יכול לשמש גם עם טווחים. אם הייתי רוצה ללכוד רק את הדמויות a, b, c, ו , הייתי יכול לעשות משהו כזה x:yz
תבנית: [abcxyz] 
מחרוזת:   abc defghijklmnopqrstuvw xyz 
תואמים: ^^^ ^^^
( דוגמה ) ...או, אני יכול לציין שאני רוצה למצוא כל תו שאינו בין dלבין w:
דפוס: [^dw] 
מחרוזת:   abc defghijklmnopqrstuvw xyz 
תואמים: ^^^ ^^^
( דוגמה ) עם זאת,הזהרעם "לא" ^. קל לחשוב "ובכן, ציינתי [^ b-f], אז אני צריך לקבל אות קטנה aאו משהו אחרי f. זה לא המקרה. הביטוי הרגולרי הזה יתאים לכל תו שלא בטווח הזה, כולל אותיות, מספרים, פיסוק ורווחים.
תבנית: [^dw] 
מחרוזת:   abc defg h . i , j - klmnopqrstuvw xyz 
התאמות: ^^^ ^ ^ ^ ^ ^^^
( דוגמא )

משימות העלאת רמות:

השתמש בסימן "לא" ^בסוגריים מרובעים כדי להתאים לכל המילים למטה שאינן מסתיימות ב- y:
תבנית:
מחרוזת: יום כלב חזיר חציר bay ray rub 
גפרורים:      ^^^ ^^^ ^^^ ^^^	
( פתרון ) כתוב ביטוי רגולרי באמצעות טווח וסימן "לא" ^כדי למצוא את כל השנים בין 1977 ל-1982 (כולל):
תבנית:
מחרוזת: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
תואם:            ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
( פתרון ) כתוב ביטוי רגולרי כדי למצוא את כל התווים שאינם תו סימן "לא" ^:
תבנית:
מחרוזת:   abc1 ^ 23*() 
תואמת: ^^^^ ^^^^^	
( פתרון )

שלב 7: שיעורי דמות

מחלקות תווים פשוטות אפילו יותר מטווחי תווים. למנועי ביטוי רגולרי שונים יש מחלקות שונות זמינות, אז אני אכסה כאן רק את העיקריים שבהם. (בדוק באיזו גרסה של ביטוי רגולרי אתה משתמש, כי ייתכן שיש יותר מהם - או שהם עשויים להיות שונים מאלה המוצגים כאן.) מחלקות תווים פועלות כמעט כמו טווחים, אך אינך יכול לציין את ערכי 'התחלה' ו'סיום':
מעמד סמלים
\d "מספרים"[0-9]
\w "סמלים של מילים"[A-Za-z0-9_]
\s "רווחים"[ \t\r\n\f]
מחלקת התווים "מילה" \wשימושית במיוחד מכיוון שקבוצת תווים זו נדרשת לעתים קרובות עבור מזהים חוקיים (שמות משתנים, שמות פונקציות וכו') בשפות תכנות שונות. אנו יכולים להשתמש \wכדי לפשט את הביטוי הרגולרי שראינו קודם לכן:
תבנית: \\[az] 
מחרוזת: ` \n `, ` \r `, ` \t ` ו- ` \f ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואם:   ^^ ^^ ^^ ^^	
בעזרת \wנוכל לכתוב כך:
תבנית: \\\w 
מחרוזת: ` \n `, ` \r `, ` \t ` ו- ` \f ` הם תווי רווח לבן, ` \. `, ` \\ ` ו` \[ ` אינם .
תואם:   ^^ ^^ ^^ ^^	
( דוגמא )

2 משימות למזל:

כפי שאתה ואני יודעים, ב-Java, מזהה (שם של משתנה, מחלקה, פונקציה וכו') יכול להתחיל רק באות a- zA- Z, סימן דולר $או קו תחתון _. ( הקו תחתון הוא, כמובן, סגנון גרוע, אבל המהדר מדלג עליו, הערת המתרגם ). שאר התווים חייבים להיות תווים של "מילה" \w. באמצעות מחלקת תווים אחת או יותר, צור ביטוי רגולרי כדי לחפש מזהי Java חוקיים בין רצפי שלושת התווים הבאים:
תבנית:
מחרוזת:   __e $12 .x2 foo Bar 3mm
תואם: ^^^ ^^^ ^^^ ^^^	
( פתרון ) מספרי ביטוח לאומי בארה"ב (SSN) הם מספרים בני 9 ספרות בפורמט XXX-XX-XXXX, כאשר כל X יכול להיות כל ספרה [0-9]. באמצעות מחלקת תווים אחת או יותר, כתוב ביטוי רגולרי כדי למצוא SSNs בפורמט נכון ברשימה למטה:
תבנית:
מחרוזת: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
תואם:              ^^^^^^^^^^^
( פתרון ) RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים. חלק 2. 20 צעדים קצרים לשליטה בביטויים רגולריים. חלק 3. RegEx: 20 צעדים קצרים לשליטה בביטויים רגולריים. חלק 4.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION