Практические примеры регулярных выражений
Реальные применения регулярных выражений
1. Валидация электронной почты
public class EmailValidator {
private static final String EMAIL_REGEX =
"^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
public static boolean isValidEmail(String email) {
return email.matches(EMAIL_REGEX);
}
public static void main(String[] args) {
System.out.println(isValidEmail("user@labex.io")); // true
System.out.println(isValidEmail("invalid-email")); // false
}
}
2. Проверка надежности пароля
graph TD
A[Password Validation] --> B[Length Check]
A --> C[Uppercase Letter]
A --> D[Lowercase Letter]
A --> E[Number Requirement]
A --> F[Special Character]
public class PasswordValidator {
private static final String PASSWORD_REGEX =
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,20}$";
public static boolean isStrongPassword(String password) {
return password.matches(PASSWORD_REGEX);
}
public static void main(String[] args) {
System.out.println(isStrongPassword("LabEx2023!")); // true
System.out.println(isStrongPassword("weak")); // false
}
}
Общие шаблоны регулярных выражений
| Шаблон |
Описание |
Пример |
\d{3}-\d{2}-\d{4} |
Номер социального страхования |
123-45-6789 |
^\+?1?\d{10,14}$ |
Номер телефона |
+1234567890 |
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b |
Валидация электронной почты |
user@example.com |
Техники извлечения данных
Извлечение информации из структурированного текста
public class DataExtractor {
public static void extractInfo(String text) {
// Extract dates
Pattern datePattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
Matcher dateMatcher = datePattern.matcher(text);
while (dateMatcher.find()) {
System.out.println("Found date: " + dateMatcher.group());
}
}
public static void main(String[] args) {
String sampleText = "LabEx course started on 2023-07-15";
extractInfo(sampleText);
}
}
Продвинутые техники регулярных выражений
Разделение и токенизация
public class TextTokenizer {
public static void tokenizeText(String text) {
// Split by multiple delimiters
String[] tokens = text.split("[,;\\s]+");
for (String token : tokens) {
System.out.println("Token: " + token);
}
}
public static void main(String[] args) {
String input = "Java, Regex; Parsing, Techniques";
tokenizeText(input);
}
}
Вопросы производительности
- Компилируйте шаблоны регулярных выражений для повторного использования
- Используйте незахватывающие группы, если это возможно
- Избегайте чрезмерно сложных шаблонов
- Тестируйте производительность на больших наборах данных
Лучшие практики в LabEx
- Понимать конкретные требования
- Тщательно тестировать шаблоны регулярных выражений
- Использовать встроенные методы регулярных выражений Java
- Учитывать последствия для производительности