דף הבית » איך ל » כיצד להשתמש בביטויים רגולריים בסיסיים כדי לחפש טוב יותר ולהציל זמן

    כיצד להשתמש בביטויים רגולריים בסיסיים כדי לחפש טוב יותר ולהציל זמן

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

    (קומיקס מ XKCD.com)

    מה הם ביטויים רגולריים?

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

    בגלל השימוש בביטויים רגילים מסתמך על תחביר מיוחד, התוכנית שלך חייבת להיות מסוגלת לקרוא ולנתח אותם. קובץ אצווה רבים שינוי שם תוכניות עבור Windows ו- OS X יש תמיכה regexps, כמו גם את הפלטפורמות חיפוש כלי GREP (אשר נגענו ב Scripting Bash שלנו למתחילים מדריך) ואת שורת הפקודה Awk עבור * Nix. בנוסף, מנהלי קבצים חלופיים רבים, משגרים וכלים לחיפוש משתמשים בהם, ויש להם מקום חשוב מאוד בשפות תכנות כמו Perl ורובי. סביבות פיתוח אחרות כמו .NET, Java ו- Python, כמו גם את C + 11 הקרובה, כולם מספקים ספריות סטנדרטיות לשימוש בביטויים רגילים. כפי שאתה יכול לדמיין, הם יכולים להיות מאוד שימושי כאשר מנסים למזער את כמות הקוד שאתה מכניס לתוכנית.

    הערה על תווים בריחה

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

    12<

    נצטרך להחליף את זה עם:

    \\\<

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

    '<'

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

    איך הם מרחיבים?

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

    tom [0123456789]

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

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

    • tom
    • tom
    • tom
    • tom
    • tom

    וכן הלאה. עם זאת, הרשימה הבאה לא תתאים, ולכן לא תופיע בתוצאות שלך:

    • עגבנייה ; את regex אינו מהווה חשבון עבור כל אותיות לאחר "tom"
    • טום; ה- regex הוא תלוי רישיות!

    אתה יכול גם לבחור לחפש עם תקופה (.) אשר יאפשר כל תו הנוכחי, כל עוד יש תו אופי.

    כפי שאתה יכול לראות, grepping עם

    .tom

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

    הערה: התנהגות ברירת המחדל של Grep היא להחזיר שורה שלמה של טקסט כאשר חלק כלשהו תואם את הביטוי הרגולרי שלך. ייתכן שתוכניות אחרות לא יעשו זאת, ותוכל לבטל זאת ב- grep עם הדגל'o '.

    ניתן גם לציין סיבוב באמצעות מקטרת (|), כמו כאן:

    (z) z

    זה ימצא הן:

    • מתמחים
    • מתמחים

    בעת שימוש בפקודה grep, אנחנו צריכים לברוח תווים מיוחדים (, |, ו) עם backslashes וכן לנצל את דגל 'ה' כדי לקבל את זה לעבוד ולהימנע שגיאות מכוערות.

    כפי שהזכרנו לעיל, זה בגלל שאנחנו צריכים לספר את פגז bash להעביר תווים אלה כדי grep ולא לעשות שום דבר איתם. הדגל 'E' אומר grep להשתמש בסוגריים צינור כמו תווים מיוחדים.

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

    tom [^ F | 0-9]

    שוב, אם אתה משתמש grep ו bash, זכור לברוח כי הצינור!

    התנאים שהיו ברשימה אך לא הופיעו הם:

    • tom
    • tom5
    • tom
    • טום

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

    איך אני יכול לנצל סביבות?

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

    שימוש במארז (מחוץ לסוגריים) מאפשר לך להגדיר את "תחילת" הקו.

    tom

    כדי לחפש קצה של שורה, השתמש בסימן הדולר.

    טום $

    אתה יכול לראות כי מחרוזת החיפוש שלנו מגיע לפני העוגן במקרה זה.

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

    12

    tom \>

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

    התוצאות הן זהות. הקפד להשתמש ציטוטים בודדים, ולא ציטוטים כפולים.

    משאבים אחרים עבור Regexps מתקדם

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

    • Zytrax.com יש כמה דפים עם דוגמאות ספציפיות של למה דברים לעשות ואינם תואמים.
    • Regular-Expressions.info יש גם מדריך הרוצח הרבה דברים מתקדמים יותר, כמו גם דף הפניה שימושי.
    • ל- Gnu.org יש דף המוקדש לשימוש ב- regexps עם grep.

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


    האם יש לך שימוש מועדף עבור ביטויים רגולריים? לדעת על renamer אצווה גדולה שמשתמשת בהם? אולי אתה רק רוצה להתרברב שלך grep-fu. לתרום את המחשבות שלך על ידי תגובה!