正则表达式主要是两点
1 符号
2 规则
熟练了以后可以发挥巨大的威力 有时候感觉就像一把沾了毒的匕首 虽然小 但是非常可怕
分为:匹配 切割 替换 获取 分组来记忆这两点
说一下一些思路上的要点:
1 正则表达式是字符串 (总在“”内)
2 一个方括号代表一个位置 方括号里面的内容代表这个位置允许出现的情况
3 方括号里面也可以有方括号 这个规则与&&连用 可以表示交集 当然 ||符号被啥也没有替代了(也就是说 只要挨着写就是||的意思 意思是并集)
4 数字 单词字符等有预定义字符类 不用写一大串就能表示相同的意思
5 切割的规则是按照xx来切割 而这个xx就是正则表达式要表达的内容
6 默认一套完整的最小有意义的单元为一个组 编号从1开始 通过()可以自定义组生效的范围 通过\+数字可以获取对应组的规则并重复使用
7 取和切是反向操作 取很麻烦 要先创建对象(规则对象) 再通过match()方法将规则跟目标字符串关联获得特定的匹配器 最后调用匹配器中的matches()方法得到结果
8 熟练最重要 仅仅记住是完全不够的
例子:
/*
需求:
按照ip地址段的顺序排序
192.68.1.254
102.49.23.13
10.10.10.10
2.2.2.2
8.109.90.30
*/
import java.util.regex.*;
import java.util.*;
class RegexTest2 //这么经典 这么综合 我只想说!背也要背住!
{
public static void main(String[] args)
{
String ip = "192.68.1.254 102.49.23.13 10.10.10.10 2.2.2.2 8.109.90.30";
String str1 = ip.replaceAll("(\\d+)","00$1");
String str2 = str1.replaceAll("0*(\\d{3})","$1");
String[] arr = str2.split(" ");
TreeSet<String> ts = new TreeSet<String>();
for (String s : arr )
{
ts.add(s);
}
for (String s : ts )
{
sop(s.replaceAll("0*(\\d+)","$1"));
}
}
public static void printchararr(char[] arr)
{
for (int i = 0; i<arr.length; i++)
{
sop(arr[i]);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void printstringarr(String[] arr)
{
for (String s : arr)
{
sop(s);
}
}
}