正则表达式

正则表达式

正则表达式的概念和定义:

正则表达式(Regular Expression,简称Regex或RegExp)是一种用于描述字符串模式的表达式,它提供了一种强大的搜索、匹配和替换文本的方式。正则表达式是由字符和特殊字符组成的字符串,用于定义文本中的搜索模式。

在Java中,正则表达式主要通过java.util.regex包来实现。常用的类包括PatternMatcher

2. 正则表达式的语法及常用例子:

2.1. 基本字符匹配:
  • . :匹配任意单个字符
  • \d:匹配数字
  • \w:匹配字母、数字、下划线
  • \s:匹配空白字符
2.2. 字符类:
  • [abc]:匹配a、b或c中的一个字符
  • [^0-9]:匹配非数字字符
2.3. 重复匹配:
  • a*:匹配0个或多个a
  • b+:匹配1个或多个b
  • c?:匹配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

如果觉得有帮助,请帮我点个赞或者收藏,感谢~

相关推荐
陈大爷(有低保)11 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
罗_三金17 分钟前
前端框架对比和选择?
javascript·前端框架·vue·react·angular
kinlon.liu25 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Fan_web1 小时前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode