29Jun

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

click fraud protection

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

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

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

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

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

instagram viewer

הערה על תווים Escaping

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

\ & lt;

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

\\\ & lt;

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

'\ & lt;'

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

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

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

tom [0123456789]

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

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

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

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

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

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

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

. tom

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

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

ניתן למצוא גם:

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

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

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

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

טום [^ F | 0-9]

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

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

  • tom0
  • tom5
  • tom9
  • tomF

אלה לא תאמו את regex שלנו.

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

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

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

^ tom

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

tom $

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

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

\ & lt; tom

tom \ & gt;

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

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

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

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

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

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

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