正则表达式
正则表达式的概念和定义:
正则表达式(Regular Expression,简称Regex或RegExp)是一种用于描述字符串模式的表达式,它提供了一种强大的搜索、匹配和替换文本的方式。正则表达式是由字符和特殊字符组成的字符串,用于定义文本中的搜索模式。
在Java中,正则表达式主要通过java.util.regex
包来实现。常用的类包括Pattern
和Matcher
。
2. 正则表达式的语法及常用例子:
2.1. 基本字符匹配:
.
:匹配任意单个字符\d
:匹配数字\w
:匹配字母、数字、下划线\s
:匹配空白字符
2.2. 字符类:
[abc]
:匹配a、b或c中的一个字符[^0-9]
:匹配非数字字符
2.3. 重复匹配:
a*
:匹配0个或多个ab+
:匹配1个或多个bc?
:匹配0个或1个c
2.4. 锚点:
^
:匹配字符串的开始$
:匹配字符串的结束
2.5. 分组和引用:
(abc)
:捕获组,匹配abc并记住\1
:引用第一个捕获组的内容
2.6. 范围:
[0-9]
:匹配0到9之间的数字[a-z]
:匹配小写字母
2.7. 转义字符:
\\
:匹配反斜杠字符本身\.
:匹配点号字符本身
2.8. 预定义字符类:
\b
:匹配单词边界\d
:匹配数字字符\D
:匹配非数字字符\w
:匹配字母、数字、下划线\W
:匹配非字母、数字、下划线\s
:匹配空白字符\S
:匹配非空白字符
2.9. 零宽断言:
(?=...)
:正向肯定预查(?!...)
:正向否定预查(?<=...)
:反向肯定预查(?<!...)
:反向否定预查
2.10. 贪婪与非贪婪:
.*
:贪婪匹配.*?
:非贪婪匹配
java示例:
java
import java.util.regex.*;
public class RegexExamples {
public static void main(String[] args) {
String input = "abc123xyz";
// 示例1:匹配数字
String pattern1 = "\\d+";
System.out.println(Pattern.matches(pattern1, input));
// 示例2:匹配单词边界
String pattern2 = "\\babc\\b";
System.out.println(Pattern.matches(pattern2, input));
// 示例3:捕获组
String pattern3 = "(\\w+)(\\d+)";
Pattern p = Pattern.compile(pattern3);
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println("Group 1: " + m.group(1));
System.out.println("Group 2: " + m.group(2));
}
// ... 更多示例
}
}
补充正则表达式常用的例子:
1. 匹配只能使用数字、英文以及下划线的字符串:
java
String pattern = "^[a-zA-Z0-9_]+$";
- 解释:^ 表示匹配字符串的开始,[a-zA-Z0-9_] 表示字符集合,+ 表示匹配一个或多个字符,$ 表示匹配字符串的结束。
2. 匹配邮箱地址:
java
String pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
- 解释:匹配邮箱地址的常见规则,包括用户名部分和域名部分。
3. 匹配URL:
java
String pattern = "^(http|https)://[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+(\\/\\S*)?$";
4. 匹配日期(YYYY-MM-DD):
java
String pattern = "^\\d{4}-\\d{2}-\\d{2}$";
- 解释:匹配形如YYYY-MM-DD的日期格式。
5. 匹配手机号码:
java
String pattern = "^1[3456789]\\d{9}$";
- 解释:匹配手机号码。
JavaScript中的使用示例:
在JavaScript中,正则表达式同样常用于字符串的匹配和处理。以下是在JavaScript中使用上述正则表达式的示例:
javascript
// 示例1:匹配只能使用数字、英文以及下划线的字符串
var pattern1 = /^[a-zA-Z0-9_]+$/;
console.log(pattern1.test("abc123")); // true
console.log(pattern1.test("abc@123")); // false
// 示例2:匹配邮箱地址
var pattern2 = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(pattern2.test("user@example.com")); // true
console.log(pattern2.test("invalid-email")); // false
// 示例3:匹配URL
var pattern3 = /^(http|https):\/\/[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+(\/\S*)?$/;
console.log(pattern3.test("https://www.example.com")); // true
console.log(pattern3.test("invalid-url")); // false
// 示例4:匹配日期(YYYY-MM-DD)
var pattern4 = /^\d{4}-\d{2}-\d{2}$/;
console.log(pattern4.test("2022-01-30")); // true
console.log(pattern4.test("invalid-date")); // false
// 示例5:匹配手机号码
var pattern5 = /^1[3456789]\d{9}$/;
console.log(pattern5.test("13812345678")); // true
console.log(pattern5.test("invalid-phone")); // false
// test(str):判断指定字符串是否符合规则,返回true或false
如果觉得有帮助,请帮我点个赞或者收藏,感谢~