---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
正则表达式:
符合一定规则的表达式
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,简化书写,所以学的就是这些符号
优点:可以简化对字符串的复杂操作
缺点:符号定义越多,正则越长,阅读性越差
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,简化书写,所以学的就是这些符号
优点:可以简化对字符串的复杂操作
缺点:符号定义越多,正则越长,阅读性越差
具体的操作功能:
1、匹配:String类中的 matches()方法,用规则匹配整个字符串,只要有一处不服就停止
注意在正则表达式中“\”的使用注意转义,两个“\\”表示一个“\”
2、切割:String类中得 split()方法
里面重要易忘的知识点:
按照叠词完成切割。
为了可以让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出
现都有编号,从1开始,想要使用已有的组可以通过\n(n就是几组)的形式获取
(.)\\1+ 多个叠词的组
组的个数,数左括号数(()(())) 4个组
(.)\\1+ 多个叠词的组
组的个数,数左括号数(()(())) 4个组
3、替换:String replaceAll()
注意一个:将叠词替换成一个字母:用“$1” $是一个特殊字符
4、获取:
操作步骤:(实例一完成)
1、将正则表达式封装成对象 Pattern类
2、让正则对象和要操作的字符串相关联( p.matcher()方法)
3、关联后,获取正则匹配引擎 (Mather m=p.matcher())
4、通过引擎对符合规则的子串进行操作,比如获取 (m.find() m.group)
m.find() 将规则作用到字符串上,并进行符合规则的子串查找
注意一个:将叠词替换成一个字母:用“$1” $是一个特殊字符
4、获取:
操作步骤:(实例一完成)
1、将正则表达式封装成对象 Pattern类
2、让正则对象和要操作的字符串相关联( p.matcher()方法)
3、关联后,获取正则匹配引擎 (Mather m=p.matcher())
4、通过引擎对符合规则的子串进行操作,比如获取 (m.find() m.group)
m.find() 将规则作用到字符串上,并进行符合规则的子串查找
m.group()
用于匹配后的结果输出
所以二者要同时存在
以上四个功能的辨别使用方法
正则表达式的思路方法:(实例二)
1、如果只想知道该字符是否对错,直接用匹配
2、如果要要把一个字符串变成另一个字符串,替换
3、想要按照自定的方式将字符串变成多个字符串,切割。获取条件以外的内容
4、想要拿到符合要求的字符串,获取符合规则的字符串
1、如果只想知道该字符是否对错,直接用匹配
2、如果要要把一个字符串变成另一个字符串,替换
3、想要按照自定的方式将字符串变成多个字符串,切割。获取条件以外的内容
4、想要拿到符合要求的字符串,获取符合规则的字符串
正则附加网页爬虫部分(实例三)
(
实例一)*/
public static void getDemo()
{
String str="ming tian jiu fang jia le ,tong xue men ";
String reg="\\b[a-z]{3}\\b";
//将规则封装成对象
Pattern p=Pattern.compile(reg);
//让正则对象和要作用的字符串相关联。获取匹配器对象
Matcher m=p.matcher(str);
System.out.println(m.matches());
//String类中得matches()方法就是通过Pattern和Matcher对象实现的
//只是在string 类中对其进行了封装
while (m.find())//将规则作用到字符串上,并进行符合规则的子串查找
{
System.out.println(m.group());//用于匹配后的结果输出
}
}
(实例二)
public static void getDemo()
{
String str="ming tian jiu fang jia le ,tong xue men ";
String reg="\\b[a-z]{3}\\b";
//将规则封装成对象
Pattern p=Pattern.compile(reg);
//让正则对象和要作用的字符串相关联。获取匹配器对象
Matcher m=p.matcher(str);
System.out.println(m.matches());
//String类中得matches()方法就是通过Pattern和Matcher对象实现的
//只是在string 类中对其进行了封装
while (m.find())//将规则作用到字符串上,并进行符合规则的子串查找
{
System.out.println(m.group());//用于匹配后的结果输出
}
}
(实例二)
需求:1、将下列字符串转换成:我要学习编程
2、将ip地址进行地址段顺序排序
192.168.1.254
102.49.23.013
10.10.10.10
2.2.2.2
8.109.90.30
3、对邮件地址进行校验(思路就是匹配)
public static void test1()
{
2、将ip地址进行地址段顺序排序
192.168.1.254
102.49.23.013
10.10.10.10
2.2.2.2
8.109.90.30
3、对邮件地址进行校验(思路就是匹配)
public static void test1()
{
String str="我我....我.要要要...学..习习习习习...编编..编.程...程程";
str=str.replaceAll("\\.+",""); // 首先要将.替换成空格
str=str.replaceAll("(.)\\1+","$1");// 再将重复的组替换成一个
System.out.println(str);
}
str=str.replaceAll("\\.+",""); // 首先要将.替换成空格
str=str.replaceAll("(.)\\1+","$1");// 再将重复的组替换成一个
System.out.println(str);
}
public static void test2()
{
String str="192.168.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
//首先要对其位数进行处理,都处理成3位,就得先全部添加2个0,这样才能保证至少有三位
str=str.replaceAll("(\\d+)","00$1");
//继续处理数字位数,都是三位数
str=str.replaceAll("0*(\\d{3})","$1"); //0*(\\d{3} 0出现0次或者多次 要有三位数字
System.out.println(str);
String[] arr=str.split(" ");
TreeSet<String> ts=new TreeSet<String>();
for (String s:arr )
{
ts.add(s);
}
for (String s:ts )
{
System.out.println(s.replaceAll("0*(\\d+)","$1"));
}
}
public static void test3()
{
String mail="abc1244@sina.com";
String reg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//精确的匹配
//有个不精确匹配 \\w+@w+(\\.\\w+)+
System.out.println(mail.matches(reg));
}
}
(实例三)
public static void getmail_1()throws Exception
{
//获取网页中的邮箱地址
URL url=new URL("http://localhost:8080/myweb/mail.html");
URLConnection conn=url.openConnection();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.compile(mailreg);
while ((line=bufIn.readLine())!=null)
{
Matcher m=p.matcher(line);
while (m.find())
{
System.out.println(m.group());
}
}
}
public static void getmail() throws Exception
{
//获取文档中邮箱地址 用到正则匹配功能
BufferedReader bufr=new BufferedReader(new FileReader("mail.txt"));
String line=null;
String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.compile(mailreg);
while ((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while (m.find())
{
System.out.println(m.group());
}
}
}
{
//获取网页中的邮箱地址
URL url=new URL("http://localhost:8080/myweb/mail.html");
URLConnection conn=url.openConnection();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.compile(mailreg);
while ((line=bufIn.readLine())!=null)
{
Matcher m=p.matcher(line);
while (m.find())
{
System.out.println(m.group());
}
}
}
public static void getmail() throws Exception
{
//获取文档中邮箱地址 用到正则匹配功能
BufferedReader bufr=new BufferedReader(new FileReader("mail.txt"));
String line=null;
String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.compile(mailreg);
while ((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while (m.find())
{
System.out.println(m.group());
}
}
}
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>