כיצד לספור את מספר ההתאמות עבור Regex?

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

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

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

2. שימוש במקרה

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

כדי לאתר כתובת דוא"ל, נשתמש בתבנית ביטוי רגולרית פשוטה:

([a-z0-9 _.-] +) @ ([a-z0-9 _.-] + [a-z])

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

נצטרך את הביטוי הקבוע הזה בתוך a תבנית כדי שנוכל להשתמש בו:

תבנית EMAIL_ADDRESS_PATTERN = תבנית.קומפילציה ("([a-z0-9 _.-] +) @ ([a-z0-9 _.-] + [a-z])");

נבחן שתי גישות עיקריות, אחת מהן תלויה בשימוש ב- Java 9 ואילך.

לטקסט לדוגמה שלנו, ננסה למצוא את שלושת הדוא"ל במחרוזת:

"אתה יכול ליצור איתי קשר דרך [email protected], [email protected] ו- [email protected]"

3. ספירת התאמות עבור Java 8 ומעלה

ראשית, בואו נראה כיצד לספור את ההתאמות באמצעות Java 8 ומעלה.

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

ספירת התאמות EmailMatcher = EMAIL_ADDRESS_PATTERN.matcher (TEXT_CONTAINING_EMAIL_ADDRESSES); ספירת int = 0; בעוד (countEmailMatcher.find ()) {count ++; }

באמצעות גישה זו, נמצא שלוש התאמות כצפוי:

assertEquals (3, count);

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

לדוגמה, בואו ניקח בחשבון את הדוגמה הזו:

מחרוזת OVERLAPPING_EMAIL_ADDRESSES = "נסה ליצור איתנו קשר בכתובת [email protected] @ baeldung.com, [email protected]"; ספירת התאמותOverlappingEmailsMatcher = EMAIL_ADDRESS_PATTERN.matcher (OVERLAPPING_EMAIL_ADDRESSES); ספירת int = 0; בעוד (countOverlappingEmailsMatcher.find ()) {count ++; } assertEquals (2, count);

כאשר ה- regex מנסה למצוא התאמות בנתון חוּט, ראשית הוא ימצא "[מוגן באמצעות דוא"ל] כתואם. מכיוון שאין חלק מתחום שקדם ל- @, הסמן לא יתאפס והשני “@ Baeldung.com” יתעלם. בהמשך, זה גם יחשיב "[דוא"ל מוגן]" כמשחק השני:

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

4. ספירת התאמות עבור Java 9 ואילך

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

ספירה ארוכה = countEmailMatcher.results () .count (); assertEquals (3, count);

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

5. מסקנה

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

ראשית, למדנו כיצד להשתמש ב- למצוא שיטה עם בזמן לוּלָאָה. ואז ראינו כיצד שיטת הזרמת Java 9 החדשה מאפשרת לנו לעשות זאת עם פחות קוד.

כמו תמיד, דוגמאות הקוד זמינות ב- GitHub.


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