正则表达式用于描述一组字符的共有特性,以便于我们对字符集做搜索、替换、编辑等操作,这篇文章主要介绍了Java前后端正则表达式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
摘要:
正则表达式是字符串处理的重要工具,Java和JavaScript中都支持正则表达式操作。本文介绍了正则表达式的基本语法,包括字符匹配、数量词、边界匹配和分组等核心概念。Java后端通过Pattern和Matcher类实现字符串匹配、查找和替换,JavaScript前端则通过test()、match()和replace()等方法实现类似功能。文中提供了验证邮箱、提取数字和替换字符串等常见场景的代码示例,帮助开发者快速掌握正则表达式在前后端开发中的应用。
一、正则表达式基础概念
1.1 定义
- 用于描述字符串模式的工具,通过特定语法规则定义待匹配字符串的特征,可实现字符串匹配、查找、替换等操作
1.2 语法基础
(1)字符匹配
| 类型 | 语法 | 说明 | 示例 |
|---|
| 普通字符 | 常规字符 | 代表自身 | abc 匹配 “abc” |
| 特殊字符 | . | 匹配除换行符 \n 外的任意单个字符 | a.c 匹配 “abc”、“a1c” |
| [] | 字符类,匹配括号内任意一个字符,支持范围(a-z/0-9) | [abc] 匹配 “a”/“b”/“c” |
| [^] | 否定字符类,匹配不在括号内的任意字符 | [^abc] 匹配非 a/b/c |
(2)数量词
| 语法 | 说明 | 示例 |
|---|
* | 匹配前面字符零次或多次 | a* 匹配 “”、“a”、“aa” |
+ | 匹配前面字符一次或多次 | a+ 匹配 “a”、“aa” |
? | 匹配前面字符零次或一次 | a? 匹配 “”、“a” |
{n} | 匹配前面字符恰好 n 次 | a{3} 匹配 “aaa” |
{n,} | 匹配前面字符至少 n 次 | a{3,} 匹配 “aaa”、“aaaa” |
{n,m} | 匹配前面字符至少 n 次、最多 m 次 | a{3,5} 匹配 “aaa”-“aaaaa” |
(3)边界匹配
| 语法 | 说明 | 示例 |
|---|
^ | 匹配字符串开头 | ^abc 匹配 “abc123” |
$ | 匹配字符串结尾 | abc$ 匹配 “123abc” |
\b | 匹配单词边界 | \bcat\b 匹配独立 “cat” |
(4)分组与引用
| 语法 | 说明 | 示例 |
|---|
() | 分组,将括号内内容作为整体 | (ab)+ 匹配 “ab”、“abab” |
\n | 引用第 n 个分组匹配的内容 | (ab)\1 匹配 “abab” |
二、Java后端正则表达式应用
2.1 核心类(java.util.regex包)
| 类名 | 作用 | 核心方法 |
|---|
Pattern | 表示编译后的正则表达式 | Pattern.compile(String regex) |
Matcher | 对输入字符串执行匹配操作 | matches()、find()、group()、replaceAll() |
2.2 核心场景示例
(1)字符串匹配(验证邮箱)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
public static void main(String[] args) {
String email = "example@email.com";
// 邮箱正则:用户名@域名.后缀(后缀至少2个字母)
String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email);
System.out.println(email + (matcher.matches() ? " 有效" : " 无效"));
}
}
(2)字符串查找(提取所有数字)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberFinder {
public static void main(String[] args) {
String input = "abc123def456ghi789";
String regex = "\\d+"; // 匹配1个及以上数字
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) { // 循环查找所有匹配项
System.out.println("找到数字: " + matcher.group());
}
}
}
(3)字符串替换(数字替换为 #)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberReplacer {
public static void main(String[] args) {
String input = "abc123def456ghi789";
String regex = "\\d+";
String replacement = "#";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String result = matcher.replaceAll(replacement); // 替换所有匹配项
System.out.println("替换后: " + result);
}
}
三、Java前端(JavaScript)正则表达式应用
3.1 正则创建方式
| 方式 | 语法示例 | 说明 |
|---|
| 字面量 | var regex = /pattern/modifiers; | 简洁,常用;modifiers 为修饰符 |
| 构造函数 | var regex = new RegExp("pattern", "modifiers"); | 支持动态拼接pattern |
常用修饰符
i:忽略大小写g:全局匹配(不终止于第一个匹配项)m:多行匹配
3.2 核心场景示例
(1)字符串匹配(验证邮箱)
function validateEmail(email) {
// 与Java邮箱正则语法一致(无需额外转义)
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return regex.test(email); // test() 返回布尔值
}
console.log(validateEmail("example@email.com") ? "有效" : "无效");
(2)字符串查找(提取所有数字)
const input = "abc123def456ghi789";
const regex = /\d+/g; // g修饰符:全局匹配
const matches = input.match(regex); // match() 返回匹配数组
console.log("找到数字: " + (matches ? matches.join(", ") : "无"));
(3)字符串替换(数字替换为 #)
const input = "abc123def456ghi789";
const regex = /\d+/g;
const replacement = "#";
const result = input.replace(regex, replacement); // replace() 直接替换
console.log("替换后: " + result);
四、常用正则表达式汇总
4.1 数字相关
| 用途 | 正则表达式 | 匹配示例 |
|---|
| 整数(正负/零) | ^-?\d+$ | 123、-456、0 |
| 正整数 | ^[1-9]\d*$ | 1、123 |
| 负整数 | ^-[1-9]\d*$ | -1、-123 |
| 浮点数(正负/零) | ^-?\d+(\.\d+)?$ | 1.23、-4.56、0.0 |
| 正浮点数 | ^[1-9]\d*(\.\d+)?|0\.\d*[1-9]\d*$ | 1.23、0.123 |
4.2 字符相关
| 用途 | 正则表达式 | 匹配示例 |
|---|
| 汉字 | ^[\u4e00-\u9fa5]+$ | 你好、中国 |
| 大写英文字母 | ^[A-Z]+$ | ABC |
| 小写英文字母 | ^[a-z]+$ | abc |
| 字母+数字 | ^[A-Za-z0-9]+$ | Ab123 |
| 字母+数字+下划线 | ^\w+$ | Ab123_ |
4.3 实用场景
| 用途 | 正则表达式 | 匹配示例 |
|---|
| 邮箱地址 | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ | example@email.com |
| 中国手机号 | ^1[3-9]\d{9}$ | 13800138000 |
| 18位身份证(简配) | ^\d{17}[\dXx]$ | 11010519491231002X |
| URL(简配) | ^https?://[^\s/$.?#].[^\s]*$ | https://www.example.com |
总结
到此这篇关于Java前后端正则表达式相关内容的文章就介绍到这了,更多相关Java前后端正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!