The Java Regex или регулярният израз е API за дефинирайте шаблон за търсене или манипулиране на низове .
Той се използва широко за дефиниране на ограничението върху низове като валидиране на парола и имейл. След като научите урока за Java regex, ще можете да тествате своите регулярни изрази с инструмента за тестване на Java Regex.
Java Regex API предоставя 1 интерфейс и 3 класа в java.util.regex пакет.
пакет java.util.regex
Класовете Matcher и Pattern предоставят възможността за регулярен израз на Java. Пакетът java.util.regex предоставя следните класове и интерфейси за регулярни изрази.
- Интерфейс MatchResult
- Съвпадащ клас
- Клас на модела
- Клас PatternSyntaxException
Съвпадащ клас
Той прилага MatchResult интерфейс. Това е regex двигател който се използва за извършване на операции за съпоставяне на последователност от знаци.
Не. | Метод | Описание |
---|---|---|
1 | булеви съвпадения() | тествайте дали регулярният израз съответства на шаблона. |
2 | булево намиране () | намира следващия израз, който отговаря на шаблона. |
3 | булево намиране (начало на int) | намира следващия израз, който съответства на шаблона от даденото начално число. |
4 | Група низове () | връща съответстващата подпоследователност. |
5 | int start() | връща началния индекс на съответстващата подпоследователност. |
6 | int end() | връща крайния индекс на съответстващата подпоследователност. |
7 | int groupCount() | връща общия брой на съответстващата подпоследователност. |
Клас на модела
Това е компилирана версия на регулярен израз . Използва се за дефиниране на шаблон за механизма на регулярни изрази.
Не. | Метод | Описание |
---|---|---|
1 | компилиране на статичен шаблон (регулярен израз на низ) | компилира дадения регулярен израз и връща екземпляра на модела. |
2 | Съпоставяне на съвпадение (вход на 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) }}Тествайте сега
Класове символи на Regex
Не. | Клас на знаци | Описание |
---|---|---|
1 | [abc] | a, b или c (прост клас) |
2 | [^abc] | Всеки знак с изключение на a, b или c (отрицание) |
3 | [a-zA-Z] | от a до z или от A до Z, включително (диапазон) |
4 | [a-d[m-p]] | 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 | Описание |
---|---|
. | Всеки знак (може или не може да съвпада с терминатора) |
д | Всякакви цифри, различни от [0-9] |
Д | Всички нецифрени, съкращение от [^0-9] |
с | Всеки празен знак, съкращение от [ x0Bf ] |
С | Всеки знак без празно пространство, съкращение от [^s] |
In | Всяка дума, съкратено от [a-zA-Z_0-9] |
IN | Всеки знак, който не е дума, съкращение от [^w] |
Граница на думата | |
Б | Граница без думи |
Пример за метасимволи на регулярен израз
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
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