黑马程序员--正则表达式笔记总结
正则表达式
作用,用于专门操作字符串
特点:用于一些特定的符号来表示一些代码操作,这样就简化了书写
好处,可以简化对字符串的复杂操作
匹配:Matches 用规则匹配整个字符串,有一处不匹配,就否定
切割:split("123455dfdsfdd","(.)\\1+");//这是按照叠词来切割的
替换:replace("dddddddd456546dd546546hkjh6kj5h654654","(.)\\1+","$1");//$1是将(.)\\1叠词重叠的 部分,替换叠词的其中一个
获取:
获取:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串关联.
3.关联后,获取正则表达式匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出
5.Pattern正则表达式的编译表示形式
6.指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配
matcher
创建匹配给定输入与此模式的匹配器。 此模式的新匹配器
通过解释 Pattern 对 character sequence 执行匹配操作的引擎。
通过调用模式的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
matches 方法尝试将整个输入序列与该模式匹配。
lookingAt 尝试将输入序列从头开始与该模式匹配。
find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
每个方法都返回一个表示成功或失败的布尔值。通过查询匹配器的状态可以获取关于成功匹配的更多信息。
正则表达式的四大功能,匹配,切割,替换,获取
import java.util.regex.*;
class Regdemo
{
public static void main(String[] args)
{
//split("123455dfdsf dfdsfds dfd jj dfgdf"," +");//按照空格切割
//split("d:\\dd\\ff\\a.txt","\\\\");//安找\\切割
//split("123455dfdsfdddfdsggfggggggggggggggggd","(.)\\1+");//这是按照叠词来切割的 为了让规则被重用,可以讲规则封装成一个组,组的出现都有编号,从一开始,
//replace("dddddddd456546546546hkjh6kj5h654654","\\d{4,}","@");
//replace("dddddddd456546dd546546hkjh6kj5h654654","(.)\\1+","$1");//$1是将(.)\\1叠词重叠的 部分,替换叠词的其中一个
//获取字符串
get();
}
//获取
public static void get()
{
String str="ming tian jiu yao fang jia,da jia";
System.out.println(str);
String reg="\\b[a-z]{3}\\b";
//封装一个正则表达式对象
Pattern p=Pattern.compile(reg);//将给定的正则表达式编译到pattern模式中
Matcher m=p.matcher(str);// 创建匹配给定输入与此模式的匹配器。
while (m.find())//尝试查找与该模式匹配的输入序列的下一个子序列。如果还有这继续往下找
{
System.out.println(m.group());//返回由以前匹配操作所匹配的输入子序列。
}
}
//替换
public static void replace(String str,String reg,String newStr)
{
str=str.replaceAll(reg,newStr);
System.out.println(str);
}
//切割
public static void split(String str,String reg)
{
String arr[] =str.split(reg);
//System.out.println(arr.length);
for (String s:arr )
{
System.out.println(s);
}
}
//匹配
public static void matches()
{
String qq="123455";
String reg="[1-9][0-9]{4,11}";
boolean bl=qq.matches(reg);
if(bl)
System.out.println("qq:"+qq);
else
System.out.println("QQ错误,不合法");
}
}
用正则表达式对IP地址进行验证
import java.util.*;
class Regtest
{
public static void main(String[] args)
{
ipsort();
}
//给ip排序
public static void ipsort()
{
String ip="129.3.4.5 21.3.4.6 3.4.3.2 1.2.5.7 5.44.45.6";
ip=ip.replaceAll("(\\d+)","00$1");//替换序列所有数字保证每位数字最低位为三位
System.out.println(ip);
ip=ip.replaceAll("0*(\\d{3})","$1");//替换每一位数字的位数大于三位的,是数组中每个数字都是三位数
System.out.println(ip);
String[] arr=ip.split(" +");
TreeSet<String> set=new TreeSet<String>();
for (String s:arr )
{
set.add(s);
}
for (String s:set )
{
System.out.println(s.replaceAll("0*(\\d+)","$1"));
}
}
}