正则表达式
正则表达式:符合一定规则的表达式。
l 作用:用于专门操作字符串。
l 特点:用一些特定的符号来表示一些代码操作,这样就简化书写
l 学习正则表达式就是在学习一些特殊符号的使用。
l 好处:可以简化对字符串的复杂操作。
l 弊端:符号定义越多,正则越长,阅读性越差。
正则表达式常见符号表示的含义:
构造 匹配
字符
\t 制表符
\n 换行符
\r 回车符
\f 换页符
字符类
[abc] a、b或c(简单类)
[^abc] 任何字符,除了abc
[a-zA-Z] 字母
[a-d[m-p] 并集
[a-z&&[def]] 交集
[a-z&&[^bc]] a-z,除了bc
[a-z&&[^m-p]] a-z,除去m到p.
预定义字符
. 任何字符
\d 数字
\D 非数字
\s 空白字符
\S 非空白字符
\w 单词字符[a-zA-Z_0-9]
\W 非单词字符
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配器的结尾
\Z 输入的结尾,仅用于最后的结束符
\z 输入的结尾
Greedy数量词
X? 一次或一次也没有
X* 零次或多次
X+ 一次或多次
X{n} 恰好n次
X{n,} 只是n次
X{n,m} 至少n次,但不超过m次
具体功能:
①匹配:String类 boolean / matches(String regex)方法.用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
练习:匹配QQ号,都是数字,不能以0开头,长度为5~15位。
MatchesDemo。Java
②切割:String类 String[] / split(String regex)
示例:String str=”zhangsan.lisi.angwu”按照.切割
规则应该这么写:String reg=”\\.”;
String st=”G:\\abc\\fg\\ff”;按照\\切割
规则应该这么写:String reg=”\\\\”;
String s=”erkkkfghhfggkkdg“;按照叠词完成切割,为了可以让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出现都有编号,从1开始,想要使用已有的组可以通过\n就是组的编号。
规则应该这么写 String reg=”(.)\\1+”
③替换 String类 String / replaceAll(String regex,String replacement)
示例:String str=”fgg1256fhj55574jk4474”将字符串中的数字替换成#
str.replaceAll(“[0-9]{5,}”,”#”);
特殊符号:$获取组的内容,后面跟组的编号。
④获取:将符合规则的子串取出
操作步骤:1.将正则表达式封装成对象
2.让正则表达式和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出。
Java.util.regex包中的Pattern类
正则表达式的编译表示形式。重要方法:
static Pattern / compile(String regex):将给定的正则表达式编译到模式中。
Matcher / matcher(CharSequence input):创建匹配给定输入此模式的匹配器。
Matcher类
Int / end():返回最后匹配字符之后的偏移量
Int / start():返回以前匹配的初始索引
Boolean / find():尝试查找与该模式匹配的输入序列的下一个子序列。
String / group():返回由以前匹配操作所匹配的输入子序列。
对于具体应用该用那种功能的思路方式:
1.如果只想知道该字符是对是错,使用匹配
2.想要将已有的字符串编成另一个字符串,替换。
3.想要按照自定的方式将 字符串变成多个字符串,切割,获取规则以外的子串。
4.想要拿到符合需求的字符串子串,获取,获取符合规则的子串。
/*题目:对于给定的ip地址进行排序
*/
import java.util.*;
class RegexDemo2
{
public static void main(String[] args)
{
String str="192,68,1,254 2,49,23,2 2,2,255,1 2,2,2,2 12,5,87,88";
System.out.println(str);
str=str.replaceAll("(\\d+)","00$1");
System.out.println(str);
str=str.replaceAll("0*(\\d{3})","$1");
System.out.println(str);
String[] arr=str.split(" +");
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}