您的位置:首页 > 财经 > 产业 > JAVA—正则表达式

JAVA—正则表达式

2024/10/5 20:18:29 来源:https://blog.csdn.net/Hismybestlove/article/details/141060416  浏览:    关键词:JAVA—正则表达式

        关于正则表达式的了解学习,以及用于校验格式,信息查找和替换分割内容。

目录

1.概述

2.书写规则

3.应用案例

4.用于信息查找

5.用于搜索替换,分割内容


1.概述

                                由一些特定的字符组成,代表一个规则

 作用

                                                 1.校验数据是否合法

                                        2.在一段文本中查找满足要求的内容

package regax;public class Text1 {public static void main(String[] args) {//目标:体验使用正则表达式//需求:校验QQ号码是否正确,要求全是数字,长度在(6-20)之间,不能以0开头System.out.println(checkQQ(null));System.out.println(checkQQ("1234655"));System.out.println(checkQQ("4654a65"));System.out.println("___________________________________");System.out.println(checkQQ1(null));System.out.println(checkQQ1("1234655"));System.out.println(checkQQ1("4654a65"));System.out.println("___________________________________");}public static boolean checkQQ1(String qq){return qq != null && qq.matches("[1-9]\\d{5,19}");}public static boolean checkQQ(String qq){//判断是否为nullif(qq == null || qq.startsWith("0")||qq.length()<6||qq.length()>20){return false;}//判断是否都是数字for (int i = 0; i < qq.length(); i++) {//根据索引获取对应数据char ch = qq.charAt(i);//判断ch的字符if(ch<'0'||ch>'9'){return false;}}return true;}
}

   相比常规的方法,正则表达式更加简洁方便


2.书写规则

String提供的匹配正则表达式的方法

public boolean matches(String regex)   判断字符串是否匹配,匹配返回true,反之返回false

字符类

[abc]                   只能是abc

[^abc]                 除了zbc外的字符

[a-zA-Z]              a到z A到Z (包括的范围)

[a-d[m-p]]           a到d或者m-p

[a-z&&[def]]        d,e,f(交集)

[a-z&&[^bc]]       a到z,除了b和c

[a-z&&[^m-p]]     a到z,除了m到p

“匹配内容 (匹配内容)” 

预定义字符集

.           匹配任意字符
\d         匹配数字,等价于 [0-9]。
\D        匹配非数字,等价于 [^0-9]。
\w        匹配单词字符,包括字母、数字和下划线,等价于 [a-zA-Z0-9_]。
\W       匹配非单词字符,等价于 [^a-zA-Z0-9_]。
\s         匹配空白字符,包括空格、制表符和换行符等,等价于 [ \f\r\n\t\v]。
\S        匹配非空白字符,等价于 [^ \f\r\n\t\v]。 

数量词

(判断出现次数)
X ?         表示 0 或 1 次匹配。
X *          表示 0 或多次匹配。
X+          表示 1 或多次匹配。
X{n}        表示精确匹配 n 次。
X{n,}       表示至少匹配 n 次。
X {n,m}   表示至少匹配 n 次,最多匹配 m 次。

元字符:


^           匹配输入字行首。
$          匹配输入行尾。
\            将下一个字符标记为特殊字符或转义字符。

模式修正符


i          表示忽略大小写。
m        表示多行匹配。
s         表示单行匹配


3.应用案例

需求:校验用户输入的电话,邮箱,时间是否合法

package regax;import java.util.Scanner;public class Text2 {public static void main(String[] args) {//checkTel();checkTime();}public static void checkTel(){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入电话号码|座机");String phone = sc.next();if(phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?)[1-9]\\d{4,19}")){System.out.println("您输入的格式正确");break;}else{System.out.println("您输入的号码格式不正确");}}}public static void checkEmail(){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入邮箱");String email = sc.next();if(email.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){System.out.println("您输入的格式正确");break;}else{System.out.println("您输入的邮箱格式不正确");}}}public static void checkTime(){Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入时间");String time = sc.next();if(time.matches("1?[0-9]:[0-6][0-9]|2?[0-4]:[0-6][0-9]|[0-9]:[0-6][0-9]")){System.out.println("您输入的格式正确");break;}else{System.out.println("您输入的时间格式不正确");}}}
}

4.用于信息查找

需求:把文本中的电话,邮箱,座机号码,热线都爬取出来

package regax;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Text3 {public static void main(String[] args) {String data = "java学习\n"+"电话:18703442157\n"+"邮箱:2293581974@qq.com\n";//定义爬取规则(正则表达式)String regex = "(1[3-9]\\d{9})|(\\w{1,}@\\w{2,10})(\\.\\w{2,10}){1,2}|(0\\d{2,5}-?\\d{5,15})";//2.把 爬取规则封装成一个pattern对象Pattern pattern = Pattern.compile(regex);//3.通过pattern对象得到查找内容的匹配器Matcher matcher = pattern.matcher(data);//4.通过匹配器开始去内容中查找信息while(matcher.find()){System.out.println(matcher.group());}}
}

5.用于搜索替换,分割内容

实现功能需要结合以下的方法

方法名说明
public String replaceAll(String regex,String newStr)按照正则表达式匹配的内容进行替换
public String[ ] split (String regex)按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组

package regax;import java.util.Arrays;public class Text4 {public static void main(String[] args) {//1.内容替换//需求 将非中文字符成-String s1 = "陈平安hsgjel宁姚gjoass阮秀lfh";System.out.println(s1.replaceAll("\\w+", "-"));//需求 删除重复字符String s2 = "我我我喜欢编编编编编编编编编编编编程";/** (.)  一组,匹配任意字符* \\1  为这个组声明一个组好 1号* +    声明必须是重复字* $1   去访问到第一组代表的那个重复的字* */System.out.println(s2.replaceAll("(.)\\1+", "$1"));//需求 获取人名String s3 = s1;String[] name = s3.split("\\w+");System.out.println(Arrays.toString(name));}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com