java regex tutorial with regular expression examples
Този урок за Java Regex обяснява какво е Редовен израз в Java, защо се нуждаем от него и как да го използваме с помощта на примери за регулярен израз:
ДА СЕ регулярен израз в Java, което е съкратено като „ регулярно изражение ”Е израз, който се използва за дефиниране на модел за търсене на низове.
Моделът за търсене може да бъде прост знак или подниз или може да е сложен низ или израз, който дефинира определен модел, който да се търси в низа.
Освен това шаблонът може да се наложи да съответства един или повече пъти на низа.
=> Посетете тук, за да видите серията за обучение за Java за всички.
Какво ще научите:
Редовен израз: Защо ни е необходим
Регулярният израз се използва главно за търсене на шаблон в низ. Защо търсим шаблон в низ? Може да поискаме да намерим определен модел в низ и след това да го манипулираме или редактираме.
Така че в компютърно приложение може да имаме непрекъснато изискване за манипулиране на различни модели. Следователно, ние винаги изискваме регулярни изрази, за да улесним търсенето на модела.
Сега даден модел за търсене, как точно работи регулярният израз?
Когато анализираме и променяме текста с помощта на регулярно изражение, казваме, че „сме приложили регулярно изражение към низа или текста“. Това, което правим, е да приложим шаблона към текста в посока ‘отляво надясно’ и изходният низ е съчетан с шаблона.
Например, помислете за низ “ абабабабаб ”. Да приемем, че е дефиниран регулярният израз „аба“. Така че сега трябва да приложим това регулярно изражение към низа. Прилагайки регулярния израз отляво надясно, регулярният израз ще съответства на низа „ aba_aba___ ”, На две места.
По този начин, след като в даден мач се използва изходен знак, не можем да го използваме повторно. Така след намирането на първото съвпадение аба, третият знак „а“ не е използван повторно.
как да намеря ключ за мрежова сигурност на Windows 10
java.util.regex
Езикът Java не предоставя вграден клас за регулярни изрази. Но можем да работим с регулярни изрази, като импортираме „ java.util.regex ' пакет.
Пакетът java.util.regex предоставя един интерфейс и три класа, както е показано по-долу:
Клас на модела: Клас на образец представлява компилираното регулярно изражение. Класът Pattern няма публични конструктори, но осигурява статични методи compile (), които връщат Pattern обекти и могат да се използват за създаване на шаблон.
Клас на съвпадение: Обектът на класа Matcher съответства на регулярния израз на шаблона на низа. Подобно на класа Pattern, този клас също не предоставя никакви публични конструктори. Той осигурява методът matcher (), който връща обект Matcher.
PatternSyntaxException: Този клас дефинира непроверено изключение. Обект от тип PatternSyntaxException връща непроверено изключение, указващо синтаксисна грешка в шаблона на регулярно изражение.
Интерфейс MatchResult: Интерфейсът MatchResult определя резултата от съвпадението на регулярния израз.
Пример за Java Regex
Нека да приложим прост пример за регулярно изражение в Java. В програмата по-долу имаме обикновен низ като шаблон и след това го съпоставяме с низ. Изходът отпечатва началната и крайната позиция в низа, където е намерен шаблонът.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args()) { //define a pattern to be searched Pattern pattern = Pattern.compile('Help.'); // Search above pattern in 'softwareTestingHelp.com' Matcher m = pattern.matcher('softwareTestingHelp.com'); // print the start and end position of the pattern found while (m.find()) System.out.println('Pattern found from position ' + m.start() + ' to ' + (m.end()-1)); } }
Изход:
Намерен модел от 15 до 19
Regex Matcher в Java
Класът на съвпадение реализира интерфейса MatchResult. Matcher действа като механизъм за регулярни изрази и се използва за точното съвпадение на последователност от символи.
По-долу са дадени често срещаните методи за клас Matcher. Той има повече методи, но ние изброихме само важните методи по-долу.
Недей | Метод | Описание |
---|---|---|
7 | int start () | Дава началния индекс на съответстваща подпоследователност и го връща. |
1 | булеви съвпадения () | Проверява дали регулярният израз съответства на модела. |
две | Шаблон на модел () | Връща шаблона, който интерпретира съвпадението. |
3 | булево намиране () | Този метод намира следващия израз, който да бъде съчетан с модела. |
4 | булево намиране (int start) | Същото като find (), но намира израза, който да бъде съчетан от дадената начална позиция. |
5 | Низова група () | Връща подпоследователността, съответстваща на модела. |
6 | Струнна група (име на низ) | Връща входящата подпоследователност. Това се улавя в по-ранната операция на съвпадение чрез улавяне на групата с посоченото име. |
8 | int край () | Връща крайната позиция / индекс на съответстващата подпоследователност. |
9 | int groupCount () | Връща общия брой съответстващи подпоследователности. |
10 | String replaceAll (String replace) | Заменете всички подпоследователности на входната последователност, които съответстват на модела, от даден низ за замяна. |
единадесет | String replaceFirst (Замяна на низ) | Заменете първата съвпадаща последователност на входната последователност с посочения низ за замяна. |
12 | String toString () | Върнете низовото представяне на текущото съвпадение. |
Пример за изпълнение на регулярен израз
Нека да видим пример за използването на някои от тези методи.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatcherDemo { public static void main(String() args) { String inputString = 'She sells sea shells on the sea shore with shells'; //obtain a Pattern object Pattern pattern = Pattern.compile('shells'); // obtain a matcher object System.out.println('input string: ' + inputString); Matcher matcher = pattern.matcher(inputString); inputString = matcher.replaceFirst('pearls'); System.out.println('
replaceFirst method:' + inputString); //use replaceAll method to replace all occurrences of pattern inputString = matcher.replaceAll('pearls'); System.out.println('
replaceAll method:' + inputString); } }
Изход:
входен низ: Тя продава морски черупки на морския бряг с черупки
replaceFirst метод: Тя продава морски перли на морския бряг с черупки
replaceAll метод: Тя продава морски перли на морския бряг с перли
Regex Pattern Class в Java
Класът Pattern дефинира шаблона за механизма за регулярни изрази, който след това може да се използва за съвпадение с входния низ.
Следващата таблица показва методите, предоставени от често използвания клас Pattern.
Недей | Метод | Описание |
---|---|---|
7 | String () split (CharSequence input, int limit) | Входният низ е разделен около съвпадения, намерени от даден модел. |
1 | статична компилация на шаблон (String regex) | Връща компилирано представяне на регулярния израз. |
две | статична компилация на шаблон (String regex, int flags) | Компилира дадено регулярно изражение, използвайки посочени флагове и модел на връщане. |
3 | Съвпада мачове (вход CharSequence) | Връща съвпадение чрез съвпадение на въведената последователност с шаблона. |
4 | статични булеви съвпадения (String regex, CharSequence input) | Компилира даденото регулярно изражение и съвпада с модела с даден вход. |
5 | int флагове () | Връща флагове на шаблона, с който се извършва съвпадението. |
6 | Низ () разделяне (вход CharSequence) | Входният низ е разделен около съвпадения, намерени от даден модел. |
8 | Струнен модел () | Връща шаблона на регулярния израз. |
9 | статичен цитиран низ (низ) | Връща литерален низ (шаблон) за дадения низ. |
10 | String toString () | Получете низово представяне на шаблона. |
Примерът по-долу използва някои от горните методи на клас Pattern.
import java.util.regex.*; public class Main { public static void main(String() args) { // define a REGEX String String REGEX = 'Test'; // string to be searched for given pattern String actualString = 'Welcome to SoftwareTestingHelp portal'; // generate a pattern for given regex using compile method Pattern pattern = Pattern.compile(REGEX); // set limit to 2 int limit = 2; // use split method to split the string String() array = pattern.split(actualString, limit); // print the generated array for (int i = 0; i Изход:
array (0) = Добре дошли в софтуера
array (1) = ingHelp портал
В горната програма използваме метода на компилиране, за да генерираме шаблон. След това разделяме входния низ за този модел и го четем в масив. И накрая, показваме масива, който е генериран в резултат на разделянето на входния низ.
Метод за съвпадение на низове Regex
Видяхме метода String.Contains () в нашите уроци за низове. Този метод връща булева стойност true или false в зависимост от това дали низът съдържа определен символ в него или не.
По същия начин имаме метод „match ()“, за да проверим дали низът съвпада с регулярен израз или регулярно изражение. Ако низът съответства на посочения регекс, тогава се връща истинска стойност или се връща false.
Общият синтаксис на метода match ():
public boolean matches (String regex)
Ако посоченият регулярен израз не е валиден, тогава се изхвърля “PatternSyntaxException”.
Нека внедрим програма, за да демонстрираме използването на метода match ().
public class MatchesExample{ public static void main(String args()){ String str = new String('Java Series Tutorials'); System.out.println('Input String: ' + str); //use matches () method to check if particular regex matches to the given input System.out.print('Regex: (.*)Java(.*) matches string? ' ); System.out.println(str.matches('(.*)Java(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)Series(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)String(.*)')); System.out.print('Regex: (.*)Tutorials matches string? ' ); System.out.println(str.matches('(.*)Tutorials')); } }
Изход:
Входен низ: уроци за Java Series
Regex: (. *) Java (. *) Съответства на низ? вярно
Regex: (. *) Серията (. *) Съответства на низ? вярно
Regex: (. *) Серията (. *) Съответства на низ? невярно
Regex: (. *) Уроци съответства на низ? вярно
Използваме много специални символи и метасимволи с регулярни изрази в Java. Също така използваме много класове знаци за съвпадение на шаблони. В този раздел ще предоставим таблиците, съдържащи класове символи, мета символи и квантори, които могат да се използват с регулярния израз.
Класове символи на Regex
Недей Клас на героите Описание 7 (a-z && (^ m-p)) Изваждане: от a до z, а не от m до p: (a-lq-z) 1 (pqr) p, q или r две (^ pqr) Отрицание: Всеки символ, различен от p, q или r 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)
Регекс квантори
Кванторите се използват за определяне на броя на появата на символа в регулярния израз.
Следващата таблица показва общите квантори на регулярни изрази, използвани в Java.
каква е фазата на анализ в sdlc?
Недей Regex квантор Описание 7 IN Всеки недумов знак, (^ w) 1 х? x се появява веднъж или изобщо не се появява две x + x се появява един или повече пъти 3 х * x се среща нула или повече пъти 4 x {n} x се среща n пъти 5 x {n,} x се появява n или повече пъти 6 X и Z} x се среща поне y пъти, но по-малко от z пъти
Мета символи на Regex
Метасимволите в регулярния израз работят като стенографски кодове. Тези кодове включват пробели и небели символи, заедно с други кратки кодове.
Следващата таблица изброява метагеровете на регулярните изрази.
Недей Мета символи Описание 1 . Всеки знак (може или не може да съвпада с терминатор) две д Всякакви цифри, (0-9) 3 Д Всяко нецифрено число, (^ 0-9) 4 с Всеки пробел, ( t n x0B f r) 5 С Всеки символ, който не е празен, (^ s) 6 in Всеки знак от дума, (a-zA-Z_0-9) 8 b Граница на дума 9 Б Граница без думи
По-долу е дадена Java програма, която използва горните специални символи в Regex.
import java.util.regex.*; public class RegexExample{ public static void main(String args()){ // returns true if string exactly matches 'Jim' System.out.print('Jim (jim):' + Pattern.matches('Jim', 'jim')); // Returns true if the input string is Peter or peter System.out.println('
(Pp)eter(Peter) :' + Pattern.matches('(Pp)eter', 'Peter')); //true if string = abc System.out.println('
.*abc.*(pqabcqp) :' + Pattern.matches('.*abc.*', 'pqabcqp')); // true if string doesn't start with a digit System.out.println('
^(^\d).*(abc123):' + Pattern.matches('^(^\d).*', 'abc123')); // returns true if the string contains exact three letters System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z) (aQz):' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z)', 'aQz')); System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z', 'a10z')); //input string length = 4 // true if the string contains 0 or more non-digits System.out.println('
\D*, abcde:' + Pattern.matches('\D*', 'abcde')); //True // true of line contains only word this ^-start of the line, $ - end of the line System.out.println('
^This$, This is Java:' + Pattern.matches('^This$', 'This is Java')); System.out.println('
^This$, This:' + Pattern.matches('^This$, This', 'This')); System.out.println('
^This$, Is This Java?:' + Pattern.matches('^This$, Is This Java?', 'Is This Java?')); } }
Изход:
Джим (Джим): невярно
(Pp) етер (Петър): вярно
. * abc. * (pqabcqp): вярно
^ (^ d). * (abc123): вярно
(a-zA-Z)(a-zA-Z)(a-zA-Z) (aQz):true
(a-zA-Z)(a-zA-Z)(a-zA-Z), a10zfalse
D *, abcde: вярно
^ Това $, Това е Java: false
^ Това $, Това: невярно
^ Този $, това Java ли е?: False
В горната програма предоставихме различни регулярни изрази, които съвпадат с входния низ. Читателите се съветват да прочетат коментарите в програмата за всеки регекс, за да разберат по-добре концепцията.
Логически или (|) оператор на Regex
Можем да използваме логическия или (| оператор) в регулярния израз, който ни дава избор да изберем или операнд от | оператор. Можем да използваме този оператор в регулярно изражение, за да дадем избор на символ или низ. Например, ако искаме да съчетаем и двете думи, „test“ и „Test“, тогава ще включим тези думи в логически или оператор като Test | test.
Нека да видим следния пример, за да разберем този оператор.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexOR { public static void main(String() args) { // Regex string to search for patterns Test or test String regex = '(Test|test)'; // Compiles the pattern and obtains the matcher object from input string. Pattern pattern = Pattern.compile(regex); String input = 'Software Testing Help'; Matcher matcher = pattern.matcher(input); // print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } //define another input string and obtain the matcher object input = 'SoftwaretestingHelp'; matcher = pattern.matcher(input); // Print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } } }
Изход:
Текст „Тест“ е намерен на 9 до 13.
Текст „тест“, намерен в 8 до 12.
В тази програма сме предоставили регулярния израз „(Тест | тест)“. След това първо даваме входния низ като „Помощ за тестване на софтуер“ и съответстваме на модела. Виждаме, че съвпадението е намерено и позицията е отпечатана.
След това даваме входния низ като „SoftwaretestingHelp“. Този път също е намерен мачът. Това е така, защото регулярният израз е използвал или оператор и следователно моделът от двете страни на | оператор се съчетава с низа.
Проверка на имейл с помощта на Regex
Също така можем да проверим имейл адреса (адреса) с регулярния израз, използвайки метода java.util.regex.Pattern.matches (). Той съответства на дадения имейл идентификатор с регулярния израз и връща true, ако имейлът е валиден.
Следващата програма демонстрира проверка на имейл с помощта на регулярни изрази.
public class EmailDemo { static boolean isValidemail(String email) { String regex = '^(\w-_\.+)*(\w-_\.)\@((\w)+\.)+(\w)+(\w)$'; //regex to validate email. return email.matches(regex); //match email id with regex and return the value } public static void main(String() args) { String email = 'ssthva@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); email = '@sth@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); } }
Изход:
Идентификационният номер на имейл е: ssthva@gmail.com
Имейл идентификационният номер е валиден? вярно
Идентификационният номер на имейл е: @ sth @ gmail.com
Идентификационният номер на имейл валиден? невярно
Както можем да видим от горния изход, първият имейл идентификатор е валиден. Вторият идентификатор директно започва с @ и следователно регулярният израз не го валидира. Следователно това е невалиден идентификатор.
най-доброто безплатно приложение за изтегляне на музика за mp3
често задавани въпроси
В # 1) Какво има в регулярния израз?
Отговор: ДА СЕ Редовен израз често наричан регулярно изражение е модел или поредица от символи (нормални или специални или мета символи), който се използва за проверка на входния низ.
В # 2) Какво е значението на класа Matcher за регулярен израз в Java?
Отговор: Класът на съвпадение (java.util.regex.Matcher) действа като двигател на регулярни изрази. Той изпълнява операциите за съвпадение, като интерпретира модела.
В # 3) Какъв е моделът в Java?
Отговор: Пакетът java.util.regex предоставя клас Pattern, който се използва за компилиране на регулярно изражение в шаблон, който е стандартното представяне за regex. След това този шаблон се използва за валидиране на низове чрез съвпадение с модела.
Q # 4) Какво е B в регулярен израз?
Отговор: B в регулярния израз се обозначава като b и е котва, която се използва за съвпадение на позиция, наречена граница на думата. Началото на линията се обозначава с карета (^), а краят на линията се обозначава със знак за долар ($).
В # 5) Java-защитена ли е от нишки?
Отговор: Да. Екземплярите от класа Pattern са неизменни и безопасни за използване от множество едновременни нишки. Но екземплярите на клас matcher не са безопасни за нишки.
Заключение
В този урок обсъдихме регулярните изрази в Java. Регулярният израз, известен също като „регулярно изражение“, се използва за проверка на входния низ в Java. Java предоставя „ java.util.regex ' пакет, който осигурява класове като Pattern, Matcher и др., които помагат да се дефинира и съчетае модела с входния низ.
Виждали сме и различни специални класове знаци и метасимволи, които можем да използваме в регулярния израз, които дават стенографски кодове за съвпадение на шаблони. Също така проучихме валидирането на имейли, използвайки регулярния израз.
=> Тук разгледайте серията от прости Java Java.
Препоръчително четене