正則表達(dá)式用于描述一組字符的共有特性,以便于我們對(duì)字符集做搜索、替換、編輯等操作,這篇文章主要介紹了Java前后端正則表達(dá)式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
摘要:
正則表達(dá)式是字符串處理的重要工具,Java和JavaScript中都支持正則表達(dá)式操作。本文介紹了正則表達(dá)式的基本語(yǔ)法,包括字符匹配、數(shù)量詞、邊界匹配和分組等核心概念。Java后端通過(guò)Pattern和Matcher類實(shí)現(xiàn)字符串匹配、查找和替換,JavaScript前端則通過(guò)test()、match()和replace()等方法實(shí)現(xiàn)類似功能。文中提供了驗(yàn)證郵箱、提取數(shù)字和替換字符串等常見場(chǎng)景的代碼示例,幫助開發(fā)者快速掌握正則表達(dá)式在前后端開發(fā)中的應(yīng)用。
一、正則表達(dá)式基礎(chǔ)概念
1.1 定義
- 用于描述字符串模式的工具,通過(guò)特定語(yǔ)法規(guī)則定義待匹配字符串的特征,可實(shí)現(xiàn)字符串匹配、查找、替換等操作
1.2 語(yǔ)法基礎(chǔ)
(1)字符匹配
| 類型 | 語(yǔ)法 | 說(shuō)明 | 示例 |
|---|
| 普通字符 | 常規(guī)字符 | 代表自身 | abc 匹配 “abc” |
| 特殊字符 | . | 匹配除換行符 \n 外的任意單個(gè)字符 | a.c 匹配 “abc”、“a1c” |
| [] | 字符類,匹配括號(hào)內(nèi)任意一個(gè)字符,支持范圍(a-z/0-9) | [abc] 匹配 “a”/“b”/“c” |
| [^] | 否定字符類,匹配不在括號(hào)內(nèi)的任意字符 | [^abc] 匹配非 a/b/c |
(2)數(shù)量詞
| 語(yǔ)法 | 說(shuō)明 | 示例 |
|---|
* | 匹配前面字符零次或多次 | 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)邊界匹配
| 語(yǔ)法 | 說(shuō)明 | 示例 |
|---|
^ | 匹配字符串開頭 | ^abc 匹配 “abc123” |
$ | 匹配字符串結(jié)尾 | abc$ 匹配 “123abc” |
\b | 匹配單詞邊界 | \bcat\b 匹配獨(dú)立 “cat” |
(4)分組與引用
| 語(yǔ)法 | 說(shuō)明 | 示例 |
|---|
() | 分組,將括號(hào)內(nèi)內(nèi)容作為整體 | (ab)+ 匹配 “ab”、“abab” |
\n | 引用第 n 個(gè)分組匹配的內(nèi)容 | (ab)\1 匹配 “abab” |
二、Java后端正則表達(dá)式應(yīng)用
2.1 核心類(java.util.regex包)
| 類名 | 作用 | 核心方法 |
|---|
Pattern | 表示編譯后的正則表達(dá)式 | Pattern.compile(String regex) |
Matcher | 對(duì)輸入字符串執(zhí)行匹配操作 | matches()、find()、group()、replaceAll() |
2.2 核心場(chǎng)景示例
(1)字符串匹配(驗(yàn)證郵箱)
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個(gè)字母)
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() ? " 有效" : " 無(wú)效"));
}
}
(2)字符串查找(提取所有數(shù)字)
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個(gè)及以上數(shù)字
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) { // 循環(huán)查找所有匹配項(xiàng)
System.out.println("找到數(shù)字: " + matcher.group());
}
}
}
(3)字符串替換(數(shù)字替換為 #)
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); // 替換所有匹配項(xiàng)
System.out.println("替換后: " + result);
}
}
三、Java前端(JavaScript)正則表達(dá)式應(yīng)用
3.1 正則創(chuàng)建方式
| 方式 | 語(yǔ)法示例 | 說(shuō)明 |
|---|
| 字面量 | var regex = /pattern/modifiers; | 簡(jiǎn)潔,常用;modifiers 為修飾符 |
| 構(gòu)造函數(shù) | var regex = new RegExp("pattern", "modifiers"); | 支持動(dòng)態(tài)拼接pattern |
常用修飾符
i:忽略大小寫g:全局匹配(不終止于第一個(gè)匹配項(xiàng))m:多行匹配
3.2 核心場(chǎng)景示例
(1)字符串匹配(驗(yàn)證郵箱)
function validateEmail(email) {
// 與Java郵箱正則語(yǔ)法一致(無(wú)需額外轉(zhuǎn)義)
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") ? "有效" : "無(wú)效");
(2)字符串查找(提取所有數(shù)字)
const input = "abc123def456ghi789";
const regex = /\d+/g; // g修飾符:全局匹配
const matches = input.match(regex); // match() 返回匹配數(shù)組
console.log("找到數(shù)字: " + (matches ? matches.join(", ") : "無(wú)"));
(3)字符串替換(數(shù)字替換為 #)
const input = "abc123def456ghi789";
const regex = /\d+/g;
const replacement = "#";
const result = input.replace(regex, replacement); // replace() 直接替換
console.log("替換后: " + result);
四、常用正則表達(dá)式匯總
4.1 數(shù)字相關(guān)
| 用途 | 正則表達(dá)式 | 匹配示例 |
|---|
| 整數(shù)(正負(fù)/零) | ^-?\d+$ | 123、-456、0 |
| 正整數(shù) | ^[1-9]\d*$ | 1、123 |
| 負(fù)整數(shù) | ^-[1-9]\d*$ | -1、-123 |
| 浮點(diǎn)數(shù)(正負(fù)/零) | ^-?\d+(\.\d+)?$ | 1.23、-4.56、0.0 |
| 正浮點(diǎn)數(shù) | ^[1-9]\d*(\.\d+)?|0\.\d*[1-9]\d*$ | 1.23、0.123 |
4.2 字符相關(guān)
| 用途 | 正則表達(dá)式 | 匹配示例 |
|---|
| 漢字 | ^[\u4e00-\u9fa5]+$ | 你好、中國(guó) |
| 大寫英文字母 | ^[A-Z]+$ | ABC |
| 小寫英文字母 | ^[a-z]+$ | abc |
| 字母+數(shù)字 | ^[A-Za-z0-9]+$ | Ab123 |
| 字母+數(shù)字+下劃線 | ^\w+$ | Ab123_ |
4.3 實(shí)用場(chǎng)景
| 用途 | 正則表達(dá)式 | 匹配示例 |
|---|
| 郵箱地址 | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ | example@email.com |
| 中國(guó)手機(jī)號(hào) | ^1[3-9]\d{9}$ | 13800138000 |
| 18位身份證(簡(jiǎn)配) | ^\d{17}[\dXx]$ | 11010519491231002X |
| URL(簡(jiǎn)配) | ^https?://[^\s/$.?#].[^\s]*$ | https://www.example.com |
總結(jié)
到此這篇關(guān)于Java前后端正則表達(dá)式相關(guān)內(nèi)容的文章就介紹到這了,更多相關(guān)Java前后端正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!