ה Java Regex או ביטוי רגולרי הוא API ל להגדיר דפוס לחיפוש או מניפולציה של מחרוזות .
הוא נמצא בשימוש נרחב כדי להגדיר את האילוץ על מחרוזות כגון אימות סיסמה ואימייל. לאחר לימוד הדרכה של Java Regex, תוכל לבדוק את הביטויים הרגולריים שלך על ידי הכלי Java Regex Tester.
Java Regex API מספק ממשק אחד ו-3 מחלקות ב java.util.regex חֲבִילָה.
חבילת java.util.regex
מחלקות Matcher ו-Pattern מספקות את המתקן של ביטוי רגולרי של Java. החבילה java.util.regex מספקת מחלקות וממשקים הבאים לביטויים רגולריים.
- ממשק MatchResult
- כיתת התאמה
- כיתת דפוסים
- מחלקה PatternSyntaxException
כיתת התאמה
הוא מיישם את תוצאה של התאמה מִמְשָׁק. זה מנוע regex המשמש לביצוע פעולות התאמה על רצף תווים.
לא. | שיטה | תיאור |
---|---|---|
1 | התאמות בוליאניות() | בדוק אם הביטוי הרגולרי מתאים לתבנית. |
2 | מצא בוליאני() | מוצא את הביטוי הבא שמתאים לתבנית. |
3 | חיפוש בוליאני (int start) | מוצא את הביטוי הבא שתואם את התבנית ממספר ההתחלה הנתון. |
4 | קבוצת מחרוזות () | מחזירה את רצף המשנה המותאם. |
5 | int start() | מחזירה את המדד ההתחלתי של רצף המשנה המותאם. |
6 | int end() | מחזירה את אינדקס הסיום של רצף המשנה המותאם. |
7 | int groupCount() | מחזירה את המספר הכולל של רצף המשנה המותאם. |
כיתת דפוסים
זה גרסה מהודרת של ביטוי רגולרי . הוא משמש להגדרת תבנית עבור מנוע הרקס.
לא. | שיטה | תיאור |
---|---|---|
1 | קומפילציה של דפוס סטטי (מחרוזת רגילה) | מרכיב את ה-Regex הנתון ומחזיר את המופע של ה-Pattern. |
2 | Matcher matcher (קלט CharSequence) | יוצר תואם התואם את הקלט הנתון עם התבנית. |
3 | התאמות בוליאניות סטטיות (מחרוזת רגקס, קלט CharSequence) | זה עובד כשילוב של שיטות קומפילציה והתאמה. הוא מרכיב את הביטוי הרגולרי ומתאים את הקלט הנתון לדפוס. |
4 | פיצול מחרוזת[](קלט CharSequence) | מפצל את מחרוזת הקלט הנתונה סביב התאמות של דפוס נתון. |
5 | תבנית מחרוזת () | מחזירה את תבנית הביטוי הרגולרי. |
דוגמה לביטויים רגולריים של Java
ישנן שלוש דרכים לכתוב את הדוגמה הרגולרית ב-Java.
import java.util.regex.*; public class RegexExample1{ public static void main(String args[]){ //1st way Pattern p = Pattern.compile('.s');//. represents single character Matcher m = p.matcher('as'); boolean b = m.matches(); //2nd way boolean b2=Pattern.compile('.s').matcher('as').matches(); //3rd way boolean b3 = Pattern.matches('.s', 'as'); System.out.println(b+' '+b2+' '+b3); }}בדוק את זה עכשיו
תְפוּקָה
true true true
הבעה רגילה . דוגמא
ה . (נקודה) מייצגת תו בודד.
import java.util.regex.*; class RegexExample2{ public static void main(String args[]){ System.out.println(Pattern.matches('.s', 'as'));//true (2nd char is s) System.out.println(Pattern.matches('.s', 'mk'));//false (2nd char is not s) System.out.println(Pattern.matches('.s', 'mst'));//false (has more than 2 char) System.out.println(Pattern.matches('.s', 'amms'));//false (has more than 2 char) System.out.println(Pattern.matches('..s', 'mas'));//true (3rd char is s) }}בדוק את זה עכשיו
שיעורי דמות רגקס
לא. | כיתת דמות | תיאור |
---|---|---|
1 | [א ב ג] | a, b או c (מחלקה פשוטה) |
2 | [^abc] | כל תו מלבד a, b או c (שלילה) |
3 | [a-zA-Z] | a עד z או A עד Z, כולל (טווח) |
4 | [א-ד[מ-פ]] | a עד d, או m עד p: [a-dm-p] (איחוד) |
5 | [a-z&&[def]] | d, e או f (צומת) |
6 | [a-z&&[^bc]] | a עד z, מלבד b ו-c: [ad-z] (חיסור) |
7 | [a-z&&[^m-p]] | a עד z, ולא m עד p: [a-lq-z](חיסור) |
דוגמה לשיעורי ביטוי רגיל
import java.util.regex.*; class RegexExample3{ public static void main(String args[]){ System.out.println(Pattern.matches('[amn]', 'abcd'));//false (not a or m or n) System.out.println(Pattern.matches('[amn]', 'a'));//true (among a or m or n) System.out.println(Pattern.matches('[amn]', 'ammmna'));//false (m and a comes more than once) }}בדוק את זה עכשיו
כימות רגקס
המכמתים מציינים את מספר המופעים של תו.
Regex | תיאור |
---|---|
איקס? | X מופיע פעם אחת או בכלל לא |
X+ | X מופיע פעם אחת או יותר |
איקס* | X מופיע אפס או יותר פעמים |
X{n} | X מופיע n פעמים בלבד |
X{n,} | X מופיע n פעמים או יותר |
X{y,z} | X מופיע לפחות y פעמים אבל פחות מ-z פעמים |
מחלקות אופי ביטוי רגולרי ומכמתים לדוגמה
import java.util.regex.*; class RegexExample4{ public static void main(String args[]){ System.out.println('? quantifier ....'); System.out.println(Pattern.matches('[amn]?', 'a'));//true (a or m or n comes one time) System.out.println(Pattern.matches('[amn]?', 'aaa'));//false (a comes more than one time) System.out.println(Pattern.matches('[amn]?', 'aammmnn'));//false (a m and n comes more than one time) System.out.println(Pattern.matches('[amn]?', 'aazzta'));//false (a comes more than one time) System.out.println(Pattern.matches('[amn]?', 'am'));//false (a or m or n must come one time) System.out.println('+ quantifier ....'); System.out.println(Pattern.matches('[amn]+', 'a'));//true (a or m or n once or more times) System.out.println(Pattern.matches('[amn]+', 'aaa'));//true (a comes more than one time) System.out.println(Pattern.matches('[amn]+', 'aammmnn'));//true (a or m or n comes more than once) System.out.println(Pattern.matches('[amn]+', 'aazzta'));//false (z and t are not matching pattern) System.out.println('* quantifier ....'); System.out.println(Pattern.matches('[amn]*', 'ammmna'));//true (a or m or n may come zero or more times) }}בדוק את זה עכשיו
Regex Metacharacters
המטא-תווים של הביטוי הרגולרי פועלים כקודים קצרים.
Regex | תיאור |
---|---|
. | כל תו (ייתכן או לא תואם ל-terminator) |
ד | כל ספרות, קצרות מ-[0-9] |
D | כל לא ספרתי, קיצור של [^0-9] |
s | כל תו לבן, קיצור של [ x0Bf ] |
S | כל תו שאינו רווח לבן, קיצור של [^s] |
In | כל תו מילה, קיצור של [a-zA-Z_0-9] |
IN | כל תו שאינו מילה, קיצור של [^w] |
ב | גבול מילה |
B | גבול לא מילים |
דוגמה למטא-תווים של ביטוי רגולרי
import java.util.regex.*; class RegexExample5{ public static void main(String args[]){ System.out.println('metacharacters d....');\d means digit System.out.println(Pattern.matches('\d', 'abc'));//false (non-digit) System.out.println(Pattern.matches('\d', '1'));//true (digit and comes once) System.out.println(Pattern.matches('\d', '4443'));//false (digit but comes more than once) System.out.println(Pattern.matches('\d', '323abc'));//false (digit and char) System.out.println('metacharacters D....');\D means non-digit System.out.println(Pattern.matches('\D', 'abc'));//false (non-digit but comes more than once) System.out.println(Pattern.matches('\D', '1'));//false (digit) System.out.println(Pattern.matches('\D', '4443'));//false (digit) System.out.println(Pattern.matches('\D', '323abc'));//false (digit and char) System.out.println(Pattern.matches('\D', 'm'));//true (non-digit and comes once) System.out.println('metacharacters D with quantifier....'); System.out.println(Pattern.matches('\D*', 'mak'));//true (non-digit and may come 0 or more times) }}בדוק את זה עכשיו
ביטוי רגיל שאלה 1
/*Create a regular expression that accepts alphanumeric characters only. Its length must be six characters long only.*/ import java.util.regex.*; class RegexExample6{ public static void main(String args[]){ System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'arun32'));//true System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'kkvarun32'));//false (more than 6 char) System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'JA2Uk2'));//true System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'arun$2'));//false ($ is not matched) }}
בדוק את זה עכשיו
ביטוי רגיל שאלה 2
/*Create a regular expression that accepts 10 digit numeric characters starting with 7, 8 or 9 only.*/ import java.util.regex.*; class RegexExample7{ public static void main(String args[]){ System.out.println('by character classes and quantifiers ...'); System.out.println(Pattern.matches('[789]{1}[0-9]{9}', '9953038949'));//true System.out.println(Pattern.matches('[789][0-9]{9}', '9953038949'));//true System.out.println(Pattern.matches('[789][0-9]{9}', '99530389490'));//false (11 characters) System.out.println(Pattern.matches('[789][0-9]{9}', '6953038949'));//false (starts from 6) System.out.println(Pattern.matches('[789][0-9]{9}', '8853038949'));//true System.out.println('by metacharacters ...'); System.out.println(Pattern.matches('[789]{1}\d{9}', '8853038949'));//true System.out.println(Pattern.matches('[789]{1}\d{9}', '3853038949'));//false (starts from 3) }}בדוק את זה עכשיו
דוגמה ל-Java Regex Finder
import java.util.regex.Pattern; import java.util.Scanner; import java.util.regex.Matcher; public class RegexExample8{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while (true) { System.out.println('Enter regex pattern:'); Pattern pattern = Pattern.compile(sc.nextLine()); System.out.println('Enter text:'); Matcher matcher = pattern.matcher(sc.nextLine()); boolean found = false; while (matcher.find()) { System.out.println('I found the text '+matcher.group()+' starting at index '+ matcher.start()+' and ending at index '+matcher.end()); found = true; } if(!found){ System.out.println('No match found.'); } } } }
תְפוּקָה:
Enter regex pattern: java Enter text: this is java, do you know java I found the text java starting at index 8 and ending at index 12 I found the text java starting at index 26 and ending at index 30