logo

Java Regex

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 предоставя следните класове и интерфейси за регулярни изрази.

  1. Интерфейс MatchResult
  2. Съвпадащ клас
  3. Клас на модела
  4. Клас PatternSyntaxException
Java Regex API

Съвпадащ клас

Той прилага MatchResult интерфейс. Това е regex двигател който се използва за извършване на операции за съпоставяне на последователност от знаци.

Не.МетодОписание
1булеви съвпадения()тествайте дали регулярният израз съответства на шаблона.
2булево намиране ()намира следващия израз, който отговаря на шаблона.
3булево намиране (начало на int)намира следващия израз, който съответства на шаблона от даденото начално число.
4Група низове ()връща съответстващата подпоследователност.
5int start()връща началния индекс на съответстващата подпоследователност.
6int end()връща крайния индекс на съответстващата подпоследователност.
7int 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