התאמת תבניות בחוטים בגרובי

1. סקירה כללית

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

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

2. מפעיל תבניות

השפה הגרובית מציגה את מה שמכונה אופרטור התבניות ~. מפעיל זה יכול להיחשב כקיצור דרך סוכר תחבירי ל- Java java.util.regex.Pattern.compile (מחרוזת) שיטה.

בואו נבדוק את זה בפועל כחלק מ- a ספוק מִבְחָן:

def "דוגמה למפעיל תבנית" () {נתון: "תבנית" def p = ~ 'foo' מצפה: p למשל של תבנית ו-: "אתה יכול להשתמש במחרוזות מלוטשות כדי למנוע בריחה משחור" def digitPattern = ~ / \ d * / digitPattern.matcher ('4711'). התאמות ()}

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

3. מפעיל התאמה

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

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

שוב נבדוק את זה בפועל כחלק מ- a ספוק מִבְחָן:

def "דוגמה למפעיל התאמה" () {expect: 'foobar' == ~ /.*oba.*/ ו-: "התאמה קפדנית"! ('foobar' == ~ / foo /)}

4. מצא מפעיל

המפעיל האחרון של גרובי בהקשר של התאמת תבניות הוא מפעיל החיפוש ~=. במקרה זה, המפעיל יצור ויחזיר ישירות a java.util.regex.Matcher למשל.

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

וזה לא הכל - ה שידוך מופע ייאלץ אוטומטית ל- בוליאני הקלד על ידי קריאה שלו למצוא() שיטה אם משתמשים בתור פרדיקט. ציטוט המסמכים הרשמיים של גרובי, פירוש הדבר "המפעיל = ~ עולה בקנה אחד עם השימוש הפשוט במפעיל = ~ של Perl".

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

def "find operator operator" () {when: "using the find operator" def matcher = 'foo and bar, baz and buz' = ~ / (\ w +) ו- (\ w +) / ואז: "ימצא קבוצות" matcher .size () == 2 ו-: "יכול לגשת לקבוצות באמצעות מערך" matcher [0] [0] == 'foo and bar' matcher [1] [2] == 'buz' ו-: "אתה יכול להשתמש בו כ פרדיקט "'foobarbaz' = ~ / bar /}

5. מסקנה

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

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

כמו תמיד, ניתן למצוא דוגמאות קוד ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found