Съдържание
В съвременните информационни системи е нормално да се виждат функциите за търсене, тези функции всеки път трябва да се обработват модели от много други комплекси. За да може да се разгледа всеки случай по -специално, ще са необходими няколко хиляди години, поради което са разработени механизми, които позволяват да се установи формулирано представяне на търсенията.Тези формули могат да бъдат намерени в регулярни изрази, които ни позволяват да установим модели за оценка на текстови низове и да върнем положителна или отрицателна стойност, ако споменатият низ съответства или не на изразената формула.
В Java Можем да приложим регулярни изрази по прост начин, но това изисква доста обширно проучване от разработчика, за да може той да научи различните елементи, които има.
Начинът, по който можем да изразим формулите, с които можем да тестваме нашите модели с определена конструкция на кода, ще го наречем синтаксис на регулярен израз.
Какво ни позволява синтаксисът?Синтаксисът ни позволява да установим модели по тип характер, количество, комбинация от характер и количества, започнете с определен елемент, задайте израз за центъра на формулата и край. С това можем да идентифицираме много специфични модели, които може да са необходими в нашата програма или може би да филтрираме по по -адекватен начин търсене в текст или база данни.
Нека видим по -долу малък списък с най -използваните елементи в регулярни изрази с Java, има много повече елементи от тези, показани в този урок, затова се препоръчва да направите свое собствено проучване, за да затвърдите знанията:
Начало на линията\^ С този елемент продължаваме да посочваме към Java който започва ред в регулярния израз.
Край на линията$ С този символ показваме, че сме завършили реда.
Списък на героите[] Със скоби ние посочваме на регулярния израз, че трябва да търси някой от списъците вътре.
Изключване[\^] Позволява ни да изберем всеки символ, който не е в списъка.
Квантификатор{j, k} Намерете какво има й посочения брой пъти к; {j,} във втория случай, каквото има й един или повече пъти; най -накрая {j} показва, че това, което е, трябва да се появи й само веднъж.
Герои на думи\ w Намерете знаците, към които принадлежи дума, но ако използваме \ W това прави обратното локализиране на знаци, които не принадлежат.
Цифри\ д Тя ни позволява да правим съвпадения само с цифри и ако използваме \ Д ще съпоставим всичко, което не е цифра или цифров знак.
Заготовки\ с Тя ни позволява да съпоставим празни пространства като раздели, интервал, но ако използваме \ С прави обратното, отговаря на всичко, което не е бяло пространство.
Както виждаме с тези няколко елемента, можем да изградим различни комбинации, с които можем да получим сравнително сложни модели.
Ако искаме да опитаме обикновена фраза Преди да съставим програма, можем да използваме страницата rubular.com, където можем да оценим моделите в реално време.
Увеличете
Ще направим един прост пример, където ще тестваме a редовен израз за валидиране на имейл, ще използваме следното:[_ a-z0-9-] + (\. [_ a-z0-9-] +) * @ [a-z0-9-] + (\. [a-z0-9-] +) * (\. [az] {2,3}) $
Първо трябва да въведем регулярния израз в първото поле на формата на страницата на rubular.com след това в полето се нарича вашия тестов низ е мястото, където ще тестваме различни имейли, за да проверим дали regex работи, нека видим как се държи валидаторът, когато въведем невалиден имейл:
Увеличете
Както виждаме, в нашия примерен имейл липсва периодът, така че е невалиден и не не генерира съвпадение С регулярния израз ще го коригираме, като поставим липсващата точка и валидаторът автоматично генерира положителен отговор, който ни позволява да видим, че нашият регулярен израз работи без никакви проблеми.Увеличете
Както виждаме, това е много полезен ресурс, когато се учим да използваме регулярни изрази не само в Java ако не на който и да е език.След като знаем какво прави всеки от основните елементи на синтаксиса, сега трябва да научим как можем да направим a търсене на модел в рамките на Java, с това можем да видим какви методи, класове и пакети влизат в действие, когато използваме регулярни изрази.
Първото нещо, което трябва да знаем, е, че всички тези помощни програми са в пакета java.util.regex, така че за да направим тези примери, трябва да включим този пакет в началото на нашите класове.
След като горното е направено, можем да тестваме за модел по следния начин:
if (ourString.matches (ourExpression)) {// Ако съвпада тук, изпълняваме код}
Виждаме, че използваме метода съвпадения (), това ще оцени символния низ спрямо шаблона за регенериране и връщане вярно или невярно, в случай че символният низ съвпада с модела или не.
Този тип употреба е добре при малки валидации, но ако ще използваме повтаряща се валидация, тоест ще се появява много пъти в нашата програма, най -добре е да направим малка рутина или клас, който ни позволява да оценим низа от параметрична форма, тоест рутина или метод, който ни позволява да въведем низ и да върнем true или false, вече сравнявайки се с определен модел.
В следващата програма ще тестваме малък модел и ще го оценим спрямо няколко низа и програмата ще ни каже кой от тях прави. съвпада, тоест, кой от тях съвпада и кой не, нека да видим кода и след това ще видим как работи:
импортиране на java.util.regex. *; публичен клас TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. Идентификаторът на нашия продукт.", "Quack, Quack, Quack!" }; Модел p = Pattern.compile (модел); for (String in: input) {boolean found = p.matcher (in) .lookingAt (); System.out.println ("'" + модел + "'" + (намерен? "Съвпада" ":" не съвпада "") + в + "'"); }}}
Тук виждаме как първото нещо, което правим, е да импортираме пакета, споменат в началото на този раздел, за да получим по този начин функционалностите на търсенето чрез регулярни изрази. След това изграждаме модел, който ще използваме като наша програма, в този случай това е модел, който съответства на буквата „В"Тогава той трябва да има някакъв знак, освен буквата"или”И трябва да завърши с точка. След това съставяме нашия модел, използвайки метода компилирам и можем да го използваме за направата на мачовете. И накрая, ако моделът съвпада, той се отпечатва с думата съвпада иначе печатаме не съвпада.
Нека видим на следното изображение как изглежда това, когато стартираме програмата:
Увеличете
След това отбелязваме, както е обяснено, първия низ или верига, ако съвпада, но вторият не, и за допълнителна справка поставяме модела, по който трябва да се направи сравнението.Сега ще извършим по -усъвършенстван пример, ще идентифицираме коя част от низовете ни съвпада, това е много полезно, когато правим текстови търсения, тъй като с това бихме могли да подчертаем съвпаденията на това, което потребителят въвежда.
За това ще използваме същата база на предишната ни програма с някои модификации, нека видим кода и след това обяснението му:
импортиране на java.util.regex. *; публичен клас Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Pattern r = Pattern.compile (модел); String text = "Идентификаторът е: QW990. Край на теста!"; Съвпадение m = r.matcher (текст); if (m.find ()) {System.out.println (модел + "съвпада \" " + m.group (0) +" \ "вътре \" " + текст +" \ ""); } else {System.out.println ("Няма съвпадения"); }}}
Отново виждаме как стартираме нашата програма, включително пакета java.util.regex. *. След това използваме същия модел от предишната програма и го компилираме с метода компилирам, интересното идва сега, ние сме използвали метода съвпадение () за да намерите съвпадението и след това с метода намирам () и метода група () можем да извлечем точно това, което съвпада, накрая правим съответните екранни разпечатки. Нека да видим как изглежда нашата програма сега:
Увеличете
Така виждаме тогава как успяхме да изолираме думата, която наистина съответства на модела, който сме подредили за сравнението на обикновена фраза.Едно от най -използваните приложения е на форми, където можем да направим валидиране на имейли, телефонни номера, кредитни карти, пароли, IP адреси, потребителски имена, пощенски кодове и дори потвърждаваме, че всички наши тагове в нашия HTML документ са правилно затворени, което ни дава възможност да постигнем по -голяма сигурност при обработката на текста, въведен от потребителите.
Но не само при валидиране в полета на формуляр, както забелязахме в последния ни пример, ние също можем да направим дълго търсене на текст По определен модел, с него можем да търсим в много сложни текстови документи по систематичен начин и по този начин да спестим много време, просто като напишем малка програма.
С това приключваме този урок, научихме как можем да преминем от наличието на различни елементи, за да изразим ситуации в нашите модели, до ефективното правене на съответните сравнения на текста или знаците, които искаме да оценим, всичко това благодарение на регулярни изрази. Тези оценки са доста бързи благодарение на оптимизациите, които езикът прави в методите, които ни предлага, така че са много подходящи за изграждането на интерфейси, където трябва да търсим и потвърждаваме текста, който потребителят въвежда.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка