Regex или Regular Expression е поредица от знаци, която образува модел за търсене. Този модел може да се използва за изпълнение на различни задачи като валидиране, съвпадение и замяна, наред с други. В Java регулярният израз е основен инструмент, използван при работа с низове. В тази статия ще разгледаме как да създадем модел на регулярен израз за време.
Задачата е да се създаде модел на регулярен израз, който може да валидира конвенционален 12-часов формат на времето, като „12:00 ч.“ или „01:45 ч.“.
public class Main {
public static void main(String[] args) {
// Test the pattern
System.out.println("12:30 PM".matches("^((1[0-2]|0?[1-9]):([0-5][0-9])\s?([AaPp][Mm]))$")); // returns true
}
}
Този модел `^((1[0-2]|0?[1-9]):([0-5][0-9])\s?([AaPp][Mm]))$` е конструиран със следната обосновка:
– `1[0-2]|0?[1-9]`: Тази част от модела проверява за часа. Разпознава всяка цифра от 01-09 и 10-12. „0?“ означава, че водещата нула не е задължителна.
– `:` това е буквален символ, който съответства на двоеточието във входа.
– `[0-5][0-9]`: Тази част проверява за минутите. Приема всяко число от 00 до 59.
– `\s`: Съвпада с празен знак.
– `[AaPp][Mm]` – Тази част проверява за сутрин или следобед. Това позволява въвеждането да приема както малки, така и главни букви.
Този модел в крайна сметка осигурява перфектно форматирано 12-часово време.
Java и Regex
- Ява езикът включва регулярен израз от версия 1.4. За да улесни операциите с регулярни изрази, Java разработи `java.util.regex`, пакет с три класа: `Pattern`, `Matcher` и `PatternSyntaxException`. Класът `Pattern` опростява инициирането на операции с регулярен израз, докато класът `Matcher` е необходим за извършване на операции за съвпадение. И накрая, `PatternSyntaxException`, подклас на `IllegalArgumentException`, обозначава всяка синтактична грешка в модел на регулярен израз.
- `Pattern.compile(String regex)`: Този статичен метод от класа `Pattern` компилира регулярния израз и го присвоява на шаблон.
- „Съвпадение на образец (вход на CharSequence)“: Този метод на екземпляр създава съвпадение, което ще съпостави регулярния израз с входа.
Дешифриране на Regex Patterns
Хващане регулярен шаблоните могат да изглеждат плашещи първоначално поради интензивното използване на специални знаци. Въпреки това, по-внимателен поглед може да дешифрира всеки модел:
– '^' е знак за котва, който обозначава началото на ред. '$' обозначава края. По този начин заедно те осигуряват пълно съвпадение на низ, а не само съвпадение на подниз.
– '1[0-2]|0?[1-9]' съвпада с всяка цифра от 01-09 или 10-12. С '|' регулярният израз взема левия или десния операнд.
– „[0-5][0-9]“ е диапазон от цифри, който съответства на всяка цифра от 00-59.
– 's' съвпада с всеки знак за интервал.
– Скобите '[ ]' дефинират клас знаци, което ви позволява да изброявате множество знаци, които да съвпадат.
Разбирането на тези отделни градивни елементи отваря цял свят от възможности за съпоставяне на шаблони, което прави регулярния израз мощен инструмент в инструментариума на всеки програмист.