目录结构
一、简介
正则表达式,又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)。描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
二、相关符号
1)单个符号
符号 | 用法与含义 |
---|---|
^ | 匹配输入字符串开始的位置 |
$ | 匹配输入字符串结尾的位置 |
. | 匹配单个任意字符,如Ja.a,可以匹配Java但不能匹配Javva |
中括号[] | 匹配单个字符,但只能匹配括号中指定的字符,如ja[vr]a,jara合法 |
| 符号 | 或,和中括号[]类似,匹配指定的字符,但可以不是单个,如r(a|b|c|dd)n |
^符号 | 表示否,如[^0—9]即不匹配数字 |
2)次数符号
以下符号是匹配其前面的子表达式出现的次数:
符号 | 次数 |
---|---|
* | 0次或者多次 |
+ | 1次或者多次 |
? | 0次或者1次 |
{n} | 刚好n次 |
{n,} | 至少匹配n次 |
{n,m} | n次到m次 |
举个栗子:
o{2}与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。
o{1,}等效于o+
o{0,}等效于o*
o{0,1}'等效于 o?
3)快捷字符
符号 | 含义 |
---|---|
\d | 匹配一个数字字符,等价于 [0-9] |
\D | 匹配一个非数字字符,等价于 [^0-9] |
\w | 匹配字母、数字、下划线,等价于[A-Za-z0-9_] |
\W | 等价于[^A-Za-z0-9_] |
\s | 空字符,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格 |
\S | 匹配任何非空白字符 |
更多字符可以参考菜鸟教程
三、常用的正则表达式
整理一些常见的正则表达式如下:
- 汉字:^[\u4e00-\u9fa5]{0,}$
- 长度为3-20的所有字符:^.{3,20}$
- Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
- 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
- InternetURL:[a-zA-z]+://[^\s]* 或 ^https://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
- 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
- IP地址:\d+.\d+.\d+.\d+
- 中国邮政编码:[1-9]\d{5}(?!\d)
- 腾讯QQ号:[1-9][0-9]{4,}
其余的表达式可以参考这里
四、正则表达式的常见操作
java中的正则表达式,建议多研究pattern类 和 matcher类
import java.util.regex.Matcher;
import java.util.regex.Pattern;
1)匹配
方法:
- public boolean matches(String regex)
举例:
public static void checkQQ(){
String qq = "123456789abc";
String regex = "[1-9]\\d{4,14}";
boolean flag = qq.matches(regex);
if(flag)
System.out.println(qq+"合规");
else
System.out.println(qq+"不合规");
}
//不合规
2)切割
方法:
- public String[] split(String regex)
举例:
public static void splitTest()
{
String str = "摸 鱼 写 博 客";
//按照多个空格来进行切割
String reg = " +";
String[] arr = str.split(reg);
System.out.println(arr.length);
//用加强for循环遍历
for(String s : arr)
{
System.out.println(s);
}
}
3)替换
方法:
- public String replaceAll(String regex,String replacement)
- replaceFirst 替换首次匹配,replaceAll 替换所有匹配
举例:
public static void replaceAllTest()
{
String str = "java123456Regular6543210Expression";
//注意String regex = "\\d";和\\d{5,}的区别
String regex = "\\d{5,}";
str = str.replaceAll(regex,"#");
System.out.println(str);
}
// java#Regular#Expression
4)获取
方法:
- 将正则表达式封装成对象。
- 让正则对象和要操作的字符串相关联。
- 关联后,获取正则匹配引擎。
- 通过引擎对符合规则的子串进行操作,比如取出。
举例:
public static void getTest()
{
String str = "mo yu xie bo ker";
String regex = "\\b[a-z]{3}\\b";//匹配只有三个字母的单词
//将规则封装成对象。
Pattern p = Pattern.compile(regex);
//让正则对象和要作用的字符串相关联。获取匹配器对象。
Matcher m = p.matcher(str);
//将规则作用到字符串上,并进行符合规则的子串查找。
boolean b = m.find();
while(b)
{
//获取匹配后结果。
System.out.println(m.group());
// start() 字符的开始下标(包含)
//end() 字符的结束下标(不包含)
System.out.println(m.start()+"...."+m.end());
}
}
五、邮箱格式验证实例
以常见的邮箱格式为例:
- 由a~z的英文字母(不区分大小写)开头
- 可由英文字母、0~9的数字、点、减号或下划线组成
- @左侧长度为1~20个字符
- 不能以点、减号结尾
代码实现:
public static boolean isValidEmail(String email) {
if ((email != null) && (!email.isEmpty())) {
//定义邮箱格式的正则表达式
String regex = "^(\w+([-.][A-Za-z0-9]+)*){1,20}@\w+([-.][A-Za-z0-9]+)*\.\w+([-.][A-Za-z0-9]+)*$";
//返回格式验证结果
return Pattern.matches(regex, email);
}
return false;
}
六、正则表达式在线生成代码工具
懒人直接走这儿:正则表达式在线生成代码工具
写完刚好五点半,下班了伙计们!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146204.html