概述正则表达式非常强大,能够解决我们开发时用于匹配一些特定的要求 。并且JAVA中还提供了相当强大的方法,扩展其功能性 。下面我们就来介绍一下:
1.定义一个关于用户名的正则表达式
String regex = "[\u4E00-\u9FEF[a-z][A-Z]{2}]\w{6,20}";
2.定义一个关于密码的正则表达式
String password = "[\w\.]{6,16}";
3. 定义一个关于QQ邮箱的正则表达式
String email = "[\d@qq\.com]{12,16}";
4.两个用来处理正则表达式的工具类
【Java正则表达式详解】compile是静态方法,用于编译规则返回Pattern对象
matcher用于匹配字符串
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
5.find():判断字符串是否匹配
6.group():将匹配到的字符串分组
7.start()和end():分别表示第几轮匹配到的字符串的下标,end()下标自动加1
8.AppendReplacement():用特定的字符串替代匹配到的字符串,并放入其第一个参数 StringBuffer中
9.appendTail():将最后匹配到的字符串的剩余串放入StringBuffer中
应用
文章插图
文章插图
文章插图
package com.bbc.regex;import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexDemo { // 定义一个全局变量用于计数 static int count = 0;// 定义一个全局变量用于替代 static String replaceStr = "-";public static void main(String[] args) {// 定义一个关于用户名的正则表达式String regex = "[\u4E00-\u9FEF[a-z][A-Z]{2}]\w{6,20}";// 定义匹配的子段String str = "吴dadadadda31da";// 定义一个关于密码的正则表达式String password = "[\w\.]{6,16}";// 定义匹配的字段String passwordStr = "dafa........";// 定义一个关于QQ邮箱的正则表达式String email = "[\d@qq\.com]{12,16}";// 定义匹配的字段String emailStr = "146456416@qq.com";// 定义一个字段用于测试find方法String line = "454156135dada...";String pattern = "(\d+)([a-z]+)(\s)(.*)";//定义一个字段用于测试start_end方法String test = "abc\b";String testStr = "abc dada abc dad abc ad";// 定义一个字段用于测试replace方法String replace = "a*b";// 定义一个匹配的字段String replaceStr1 = "aabdadasabdadabbadadaabda";System.out.println("用户名:" + judge(regex, str));System.out.println("密码:" + judge(password, passwordStr));System.out.println("邮箱:" + judge(email, emailStr));find(pattern, line);start_end(test, testStr);replace(replace,replaceStr1); } // 定义一个方法,判断字符串是否合法 public static boolean judge(String regex, String str) {Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);return m.matches(); } // 定义一个方法,获取字符串的分割点 public static void find(String regex, String str) {Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);if (m.find()) {System.out.println("value1" + ":" + m.group(0));System.out.println("value2" + ":" + m.group(1));System.out.println("value3" + ":" + m.group(2));System.out.println("value4" + ":" + m.group(3));System.out.println("value5" + ":" + m.group(4));} }// 定义一个方法,获取每个分割点的坐标 public static void start_end(String regex , String str){Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);while(m.find()){count++;System.out.println("第"+ count +"次循环");System.out.println("start:" + m.start());System.out.println("end:" + m.end());} }// 定义一个方法,用特定的字段取代匹配的字段 public static void replace(String regex , String str){Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);StringBuffer sb = new StringBuffer();while(m.find()){m.appendReplacement(sb, replaceStr);}m.appendTail(sb);System.out.println("sb:" + sb); }}
演示文章插图
本期内容到此结束,我们下期不见不散!
推荐阅读
- 美团对 Java 新一代垃圾回收器 ZGC 的探索与实践
- java中的装箱和拆箱
- 2019年的6个JavaScript用户认证库
- 又一个小而美的Java Web框架:Solon
- 万字详文:Java内存泄漏、性能优化、宕机死锁的N种姿势
- javascript 知识普及之 FormData
- 技术转载 || 使用java API进行zip递归压缩文件夹以及解压
- 两万字长文读懂 Java 集合
- 腾讯算法:判断一个数是否在40亿个整数中?最后附java代码
- Java最全面试题之Spring篇