Java基础——正则表达式

本文详细介绍了Java中的正则表达式,包括基本语法、常用操作和实例解析。从匹配开始字符`^`和结束字符`$`,到量词*、+、?以及边界匹配,再到正向预测和反向预测等高级用法。此外,还提供了一些实战例子,如数值字符串验证、QQ号格式检查、电子邮箱格式验证等,帮助读者掌握正则表达式在Java中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式

定义字符串的模式,字符串都能通过正则表达式表达出来,通过正则表达式“指定"筛选满足要求的字符串

基本语法

  • 每个()中可以包括一个正则表达式,()组成的字符串可以选择某个来进行匹配
  • 转义字符“\”,在java正则中“\\”表示“\”,个数一定是偶数,比如匹配“\”字符:声明String s = "\\";对应的正则表达式String pattern = "\\\\"。(第一个斜杠是转义符,第二个斜杠是斜杠本身,第三个斜杠是转义符,第四个斜杠是斜杠本身).;对于本身就是像“\n \r”这样的,正则表达式也是一个“\n \r”(就是一个整体),如果是匹配一些特殊字符,就是直接声明字符串时就要转义的字符,例如String s = "\[",匹配这个括号的时候就需要正则表达式String pattern = "\\["
  • ^定义开始匹配的字符,这个和$就是精准的匹配,标定了一串字符串的开始和结束,如果不使用,如果字符串中包含一段满足条件的就会匹配成功
  • $定义结束匹配的字符
  • *匹配前面的表达式0或多次;+一次或多次;?0或者1次
  • .匹配除"\r\n"之外的任何单个字符。要匹配包括"\r\n"在内的任意字符的话,用"[\s\S]"
  • *、+、?、{n}、{n,}、{n,m}后面加上“?”表示非贪心,匹配最少
  • {n}n非负整数,匹配n个前面的表达式;{n,}匹配至少n个;{n,m}至少n至多m
  • ()匹配括号内的表达式及其子表达式
  • (?:自定义表达式)匹配表达式但是不匹配它的子表达式
  • ?=自定义表达式)正向预测,符合表达式的前者才会匹配
  • ?!自定义表达式)和上面相反
  • |或,不能同时
  • [各种字符]匹配单个字符的,串中某一个字符在中括号里,这个字符就匹配成功了(比如匹配一个字符串有n个字符,就需要n个中括号)
  • [^各种字符],不包含的,串中某一个字符不在这个范围就能;[a-z]类似
  • \b匹配字边界,这个字符前面的表达式作为收尾
  • \B非边界的表达式
  • \d数字字符,就是[0-9]
  • \D非字符,就是[^0-9]
  • \n换行符
  • \r回车
  • \s任何空白字符
  • \S任何非空白字符
  • \t制表符
  • \w字类字符,就是[A-Za-z0-9_]字母数字下划线
  • \W非字类字符

几个小例子(网上找的一些,自己练一练)

用String的matches(String s)检验

1.表示数值的字符串,比如字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是

String pattern = "[+-]?[0-9]*(\\.[0-9]+)?([eE][+-]?[0-9]+)?"

[+-]?首位某个符号出现0或者1次
[0-9]*0或者多次出现1位数字
(\\.[0-9]+)?小数点只有一个,多位的数字,整体有一个或者没有
([eE][+-]?[0-9]+)?两种指数符号取一即可,可有可无但是不能出现两次的正负号,指数值一定要有;最后这个指数结构可以没有

2.对输入的qq号进行匹配(qq匹配规则:长度为5-10位,纯数字组成,且不能以0开头)1

String pattern = "[1-9][0-9]{4,9}"

[1-9]首位是除去0的一个数
[0-9]{4-9}剩下的4到9位可以是0到9

3.非负整数,非正整数,负整数,整数,非负浮点数(默认都是以字符串形式写的)
^\\d+$^-\\d+|0$^[+-]?\\d+$^+?\\d?(\\.\\d+)?([eE][+-]?\\d+)?$
4.长度为8-10的用户密码(字母开头,数字和下划线)
^[a-zA-Z]\w{7,9}
5.电子邮箱
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

Java中处理正则表达式的函数

1.class Pattern按照 jdk 源码中描述的:

“正则表达式,指定为字符串,首先一定要编译为 Pattern 类的一个实例,然后利用这个实例创建一个 Matcher使用”

基本使用:

String s = "I am PanicJaw";
Pattern pattern = Pattern.compile("^[A-Z](\s[a-zA-Z]+)+$");
Matcher matcher = pattern.matcher(s);
matcher.matches();//这个是匹配整个字符串,不全部匹配用find()

  1. 题目出处 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值