Java基础24~正则表达式

项目开发视频:
SpringCloud微服务开发入门
手把手开发基于SpringBoot的员工管理系统
亿度云盘~Java小白入门实战


前言

正则表达式是一个强大的字符串操作工具,能实现复杂格式的字符串匹配、替换、分割、搜索等。
正则表达式在各种语言中都支持,如:java、Javascript、python等,语法是通用的。
正则表达式由各种符号组成,关键点就是学习这些符号的使用。

字符匹配

用[]匹配单个字符,()匹配多个单词

符号用法
[abc]查找在方括号中的任意一个字符
[^abc]查找不在方括号中的任意一个字符
[0-9]查找0-9中的任意一个数字
[a-z]查找从小写a到z中的任意一个字符
(red|blue|green)查找小括号中的任意一项

开头和结尾

  • ^ 匹配一个字符串的开头,比如 (^a) 就是匹配以字母a开头的字符串
  • $ 匹配一个字符串的结尾,比如 (b$) 就是匹配以字母b结尾的字符串

在正则表达式的开头和结尾添加^和$,可以有效匹配完整的字符串:

/^表达式$/

元字符

符号用法
.查找任意的单个字符,除换行符外
\w任意一个字母或数字或下划线,[A-Za-z0-9_]中任意一个
\W查找非单词的字符,等价于[^A_Za_z0_9_]
\d匹配一个数字字符,等价于[0-9]
\D匹配一个非数字字符,等价于[^0-9]
\s匹配任何空白字符,包括空格,制表符,换行符等等。等价于[\f\n\r\t\v]
\S匹配任何非空白字符,等价于[^\f\n\r\t\v]
\b匹配单词边界,单词和空格间的位置,如’er\b’可以匹配”never”中的”er”,但不能匹配”verb”中的”er”
\B匹配非单词边界,’er\B’能匹配’verb’中的’er’,但不能匹配’never’中的’er’
\0查找NUL字符。
\n匹配一个换行符
\f匹配一个换页符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符
\xxx查找一个以八进制数xxx规定的字符
\xdd查找以16进制数dd规定的字符
\uxxxx查找以16进制数的xxxx规定的Unicode字符。

量词

符号用法
n+匹配任何至少包含一个n的字符串
n*匹配零个或者多个n的字符串
n?匹配零个或者1个n的字符串
n{x}匹配包含x个n的序列字符串
n{x,y}匹配至少x个,最多y个n的字符串
n{x,}匹配至少x个的字符串
n$匹配以n结尾的字符串
^n匹配以n开头的字符串
?=n匹配其后紧接指定的n字符串
?!n匹配其后没有紧接指定的n字符串

常用的正则表达式

一些常用的正则表达式
手机号

^1[3|4|5|7|8]\d{9}$

小数

^(-?\d+)(\.\d+)?$

邮箱地址

[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}

HTML标签

/<(.*)>.*<\/\1>|<(.*) \/>/

中文字符

[\u4e00-\u9fa5]

QQ号

(\d+)\.(\d+)\.(\d+)\.(\d+)

IP

(\d+)\.(\d+)\.(\d+)\.(\d+)

使用正则表达式

Java实现正则表达式的匹配的API:

  • Pattern 表达模式
  • Matcher 匹配器

Pattern类

创建方法

Pattern.compile(regEx)
忽略大小写
Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);

Matcher类

创建方法

pattern对象.matcher(字符串)

常用方法

  • boolean matches() 是否匹配完整字符串

邮箱验证案例

public static void main(String[] args) {
    // 要验证的字符串
    String str = "service@xsoftlab.net";
    // 邮箱验证规则
    String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";
    // 编译正则表达式
    Pattern pattern = Pattern.compile(regEx);
    Matcher matcher = pattern.matcher(str);
    // 字符串是否与正则表达式相匹配
    boolean rs = matcher.matches();
    System.out.println(rs);
}

常用方法

  • boolean find() 是否能在字符串中搜索到定义的内容
  • String group(String name) 返回搜索到的字符串内容

在多个img标签中搜索src的内容

String str = "<img src=\"http://www.xx.com/1.jpg\"><img src=\"http://www.xx.com/2.jpg\">";
Pattern pattern = Pattern.compile("<img src=\"(?<url>.+?)\">");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group("url"));
}

String

String类中的一些方法也都使用了正则表达式
如:

  • String replaceAll(String regex,String replacement)
  • boolean matches(String regex)
  • String[] split(String regex)

将数字替换为*

String str = "123456Java";
String str2 = str.replaceAll("\\d", "*");

匹配手机号

String tel = "1567667443";
boolean matches = tel.matches("^1[3|4|5|7|8]\\d{9}$");

分割字符

String words = "中国.湖北.武汉";
String[] strings = words.split("\\.");

结束


大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页