正则表达式(Regular Expression,简称 Regex)是一种强大的文本处理工具,用于匹配、查找和替换字符串中的特定模式。以下是入门指南和常用正则表达式示例:
一、正则表达式入门
1. 基本语法
符号 | 说明 | 示例 |
---|---|---|
. |
匹配任意单个字符(除换行符) | a.c → “abc”、“a1c” |
\d |
匹配数字(等价于 [0-9] ) |
\d\d → “12”、“99” |
\w |
匹配字母、数字、下划线 | \w+ → “hello_123” |
\s |
匹配空白字符(空格、制表符等) | \s+ → 匹配连续空格 |
^ |
匹配字符串开头 | ^abc → 以 “abc” 开头 |
$ |
匹配字符串结尾 | xyz$ → 以 “xyz” 结尾 |
^ / $ |
字符串开始 / 结束 | ^start / end$ |
[abc] |
匹配括号内的任意字符 | [aeiou] → 匹配元音字母 |
[^abc] |
匹配不在括号内的任意字符 | [^0-9] → 非数字字符 |
2. 量词
符号 | 说明 | 示例 |
---|---|---|
* |
匹配前一个元素0次或多次 | a* → “”, “a”, “aaaa” |
* / + |
匹配前一个元素 0次+/1次+(贪婪匹配) | a+ → “a”, “aaa” |
? |
匹配前一个元素0次或1次 | colou?r → “color”, “colour” |
{n} |
匹配前一个元素恰好n次 | \d{4} → 4位数字(如年份) |
{n,m} |
匹配前一个元素n到m次 | \d{3,5} → 3到5位数字 |
3. 分组与逻辑
符号 | 说明 | 示例 |
---|---|---|
(abc) |
分组,捕获匹配的内容 | (ab)+ → “abab” |
` | ` | 逻辑“或” |
(?:abc) |
非捕获分组(不保存匹配) | `(?:http |
二、常用正则表达式示例
1. 邮箱验证
正则表达式:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Java 代码:
import java.util.regex.Pattern; public class EmailValidator { private static final String EMAIL_REGEX = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"; public static boolean validateEmail(String email) { return Pattern.matches(EMAIL_REGEX, email); } }
2. 手机号(中国大陆)
正则表达式:
^1[3-9]\d{9}$
Java 代码:
public class PhoneValidator { private static final String PHONE_REGEX = "^1[3-9]\\d{9}$"; public static boolean validatePhone(String phone) { return Pattern.matches(PHONE_REGEX, phone); } }
3. 日期(YYYY-MM-DD)
正则表达式:
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
Java 代码:
public class DateValidator { private static final String DATE_REGEX = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"; public static boolean validateDate(String date) { return Pattern.matches(DATE_REGEX, date); } }
4. 时间(HH:MM:SS)
正则表达式:
^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$
Java 代码:
public class TimeValidator { private static final String TIME_REGEX = "^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$"; public static boolean validateTime(String time) { return Pattern.matches(TIME_REGEX, time); } }
5. 提取URL中的域名
正则表达式:
^(https?|ftp)://([^/:]+)(:\d+)?(/.*)?$
Java 代码:
public class UrlParser { private static final String URL_REGEX = "^(https?|ftp)://([^/:]+)(:\\d+)?(/.*)?$"; public static String extractDomain(String url) { Pattern pattern = Pattern.compile(URL_REGEX); Matcher matcher = pattern.matcher(url); return matcher.find() ? matcher.group(2) : null; } }
6.中文汉字
正则表达式:
^[\u4e00-\u9fa5]+$ # 匹配纯中文字符
Java 代码:
public class ChineseValidator { private static final String CHINESE_REGEX = "^[\u4e00-\u9fa5]+$"; public static String extractChinese(String str) { Pattern pattern = Pattern.compile(CHINESE_REGEX); Matcher matcher = pattern.matcher(str); return matcher.find() ? matcher.group() : null; } }
7.IP地址(IPv4)
正则表达式:
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
Java 代码:
public class IPValidator{ private static final String IP_REGEX = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$"; public static String validateIp(String str) { Pattern pattern = Pattern.compile(IP_REGEX); Matcher matcher = pattern.matcher(str); return matcher.find() ? matcher.group(): null; } }
8.密码长度(至少8位,包含字母和数字)
正则表达式:
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
Java 代码:
public class PasswordLenValidator{ private static final String IP_REGEX = "^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"; public static String validateIp(String str) { Pattern pattern = Pattern.compile(IP_REGEX); Matcher matcher = pattern.matcher(str); return matcher.find() ? matcher.group(): null; } }
三、正则表达式练习工具
- Regex101:https://regex101.com
- 支持多语言(Python、Java、JavaScript等),提供语法高亮和解释。
- RegExr:https://regexr.com
- 实时匹配测试,适合快速验证模式。
- Debuggex:https://www.debuggex.com
- 可视化正则表达式执行流程。