Регулярные выражения в Java (regexp)
Регулярные выражения (Regular Expressions) позволяют сопоставлять текст с
указанным шаблоном, а также выполнять замену текста. Эти операции осуществляются
с помощью универсальных символов, которые специальным образом
интерпретируются.
Регулярные выражения используются в большом количестве
языков программирования.
В Java тоже есть пакет, который позволяет работать с
ними - java.util.regex.
Пакет состоит всего из трех
классов: Matcher, Pattern, PatternSyntaxException.
Pattern - скомпилированное
представление регулярного выражения.
Matcher - движок, который производит
операцию сравнения (match).
PatternSyntaxException - указывает на
синтаксическую ошибку в выражении.
Последовательность вызова методов при
работе с regexp:
Pattern p = Pattern.compile(“a*b”); Matcher m = p.matcher(“aaab”); boolean b = m.matches();
Как видно из примера, регулярное выражение сперва должно быть
откомпилировано. Результирующий объект может быть использован для создания
объекта Matcher на основе java.lang.CharSequence (String). Matcher в свою
очередь вызывает метод matches().
Регулярные выражения очень полезны при
server- и client-side валидации данных.
Давайте рассмотрим небольшой пример.
Допустим, необходимо проверить корректность e-mail адреса.
import java.util.regex.*;
public class TestRegexp {
public static final Pattern pattern = Pattern.compile
(“[a-zA-Z]{1}[a-zA-Z\\d\\u002E\\u005F]+@([a-zA-Z]+\\u002E){1,2}((net)|(com)|(org))”);
public static void doMatch(String word) {
String output = “Validation for \“” + word + “\””
Matcher matcher = pattern.matcher(word);
if (matcher.matches())
output += “ passed.”
else
output += “ not passed.”
System.out.println(output);
}
public static void main(String[] args) {
doMatch(“[email protected]”);
doMatch(“[email protected]”);
doMatch(“[email protected]”);
doMatch(“[email protected]”);
}
}
Последовательность вида [a-zA-Z] указывает на множество. {n} говорит о том,
что некоторый символ должен встретится n раз, а {n,m} - от n до m раз. Символ \d
указывает на множество цифр. “\u002E” и “\u005F” - это символы точки и
подчеркивания соответсвенно. Знак плюс после некоторой последовательности
говорит о том, что она должна встретится один или более раз. “|” - представление
логического “или”. Полное описание всех конструкций можно найти в Java API.
В
нашем примере под Pattern будут подходить те e-mail адреса, которые начинаются с
буквы, содержат буквы, цифры, точку и подчеркивание до символа “@” и находятся в
доменах com, net, org (не более третьего уровня).
А вот и результат
выполнения программы:
Validation for “[email protected]” passed.
Validation for “[email protected]” not passed.
Validation for “[email protected]” passed.
Validation for “[email protected]” not passed.
это я думаю лучший способ проверки:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ggggg {
public static void checkEmail(String sEmail) {
String sDomen =
“[a-z][a-z[0-9]\u005F\u002E\u002D]*[a-z||0-9]”;
//String sDomen2 = “([a-z]){2,4}”;
// variant two (net||org||ru||info …
||jp)
String sDomen2 = “(net||org||ru||info)”;
Pattern p = Pattern.compile(sDomen + “@” + sDomen + “\u002E” +
sDomen2);
Matcher m = p.matcher(sEmail.toLowerCase());
String sResult = m.matches()?sEmail + “: passed.”:sEmail + “: not
passed.”;
System.out.println(sResult);
}
public static void main(String[] args) {
// TODO Auto-generated method
stub
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”mail@mail.”);
checkEmail(”mail@mail”);
checkEmail(”");
checkEmail(”sgfdsg”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”mail@_mail.ru”);
checkEmail(”mail@mail_.ru”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”ma*[email protected]”);
checkEmail(”mail@ma^il.ru”);
checkEmail(”[email protected]”);
checkEmail(”@mail.my.my1.ru”);
checkEmail(”[email protected]”);
checkEmail(”[email protected]”);
checkEmail(”m
[email protected]”);
checkEmail(”mail@d d.r
u”);
}
}
Вот еще один оттличный метод проверки Email : http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html