正则表达式12
来源:互联网 发布:淘宝鞋子质量好的店铺 编辑:程序博客网 时间:2024/05/18 11:28
一、正则表达式理解
正则即是正确的规则。
正则表达式通过一些特殊的符号来操作字符串数据,可以简化书写,不过定义太多也不便于阅读。
二、常见操作:
1,匹配:其实用的就是String类中的matches方法。
String reg = “[1-9][0-9]{4,14}”;
boolean b = qq.matches(reg);//将正则和字符串关联对字符串进行匹配。
2,切割:其实用的就是String类中的split方法。
3,替换:其实用的就是String类中的replaceAll();
4,获取:
1),先要将正则表达式编译成正则对象。使用的是Pattern中静态方法 compile(regex);
2),通过Pattern对象获取Matcher对象。
Pattern用于描述正则表达式,可以对正则表达式进行解析。
而将规则操作字符串,需要从新封装到匹配器对象Matcher中。
然后使用Matcher对象的方法来操作字符串。
如何获取匹配器对象呢?
通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。
3),使用Matcher对象中的方法即可对字符串进行各种正则操作。
5、组和捕获
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))中,存在四个这样的组:
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
组零始终代表整个表达式。在替换中常用$匹配组的内容。
三、案例演示:
案例1:演示简单的正则操作
package myDemo;/*正则*/import java.util.regex.*;public class Regex {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {functionDemo_1();sop("---------------------------");functionDemo_2();sop("---------------------------");functionDemo_3();sop("---------------------------");functionDemo_4();sop("---------------------------");functionDemo_5();sop("---------------------------");functionDemo_6();sop("---------------------------");}public static void functionDemo_1(){//匹配手机号码String tel = "15665273044";String regex = "1[358]\\d{9}";Boolean b = tel.matches(regex);sop(tel+":"+b);}public static void functionDemo_2(){//演示切割 String tel = "zhangsan lisi wangwu";String[] gex = tel.split("\\s+");for(String str : gex){sop(str);}}public static void functionDemo_3(){//演示切割 //(.)表示一组,\\1+表示与第1组相同的出现1次以上String tel = "zhangsanttttttlisimmmmmmmmmmmwangwu";String[] gex = tel.split("(.)\\1+");for(String str : gex){sop(str);}}/* * 演示替换 */public static void functionDemo_4(){//$表示前一个参数的第一组String tel = "zhangsanttttttlisimmmmmmmmmmmwangwu";String gex = tel.replaceAll("(.)\\1+","$1");sop(gex);}public static void functionDemo_5(){ String tel = "15665273044";tel = tel.replaceAll("(\\d{3})(\\d{4})(\\d{4})","$1****$3");sop(tel);} /* * 演示获取 * 将正则规则进行对象的封装。 * Pattern p = Pattern.compile("a*b"); * 通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher。 * boolean b = m.matches(); */public static void functionDemo_6(){ //打印三个字符的单词 // \\b表示单词边界String tel = "da jia hao,ming tian bu fang jia";//1. 将正则封装成对象String regex = "\\b[a-z]{3}\\b";Pattern p = Pattern.compile(regex);//2. 通过正则对象获取匹配器对象Matcher m = p.matcher(tel);//使用Matcher对象的方法对字符串进行操作。 //既然要获取三个字母组成的单词。 //查找:find();while (m.find()){sop(m.group());//获取匹配的子序列sop(m.start()+":"+m.end());//字符在字符串中的索引位置}}}<strong></strong>结果:
案例2:
package regexTest;import java.util.TreeSet;/** * @author LinP *1.治疗口吃:我...我我...我我我..我我我我...... *我我我我..要要要...要要要..学学学.编编..编...编.编.编编..编程..程程程 * *2 ip地址排序。 * 192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55 * * 3.//对邮件地址校验 */public class RegexDemo {public static void main(String[] args) {function_Test1();System.out.println("-------------------------");function_Test2();System.out.println("-------------------------");function_Test3();}private static void function_Test3() {//对邮件地址校验。 String mail = "995676373@qq.com"; String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3})+"; boolean b = mail.matches(regex); System.out.println(mail + ":" + b);}private static void function_Test2() {String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";//1. 为了让ip可以按照字符串顺序比较,只要让ip的每一段的位数相同。 //所以,补零,按照每一位所需最多0进行补充,每一段都加两个0。 ip_str = ip_str.replaceAll("(\\d+)","00$1"); System.out.println(ip_str); //然后每一段保留数字3位。 ip_str = ip_str.replaceAll("0*(\\d{3})","$1"); System.out.println(ip_str); //1. 将ip地址切出。 String[] ips = ip_str.split(" +"); TreeSet<String> ts = new TreeSet<String>(); for(String ip : ips){ ts.add(ip); } for(String ip : ts){ System.out.println(ip.replaceAll("0*(\\d+)","$1")); }}private static void function_Test1() {String str = "我...我我...我我我..我我我我......我我我我我..要要要...要要..学学学.编编..编...编.编.编编..编程..程程程";//1. 将字符串中.去掉,用替换。String s = str.replaceAll("\\.+", "");//2. 替换叠词String s1 = s.replaceAll("(.)\\1+","$1");System.out.println(s1);}}结果:
案例演示3:
网络爬虫
/** * */package regexTest;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.util.ArrayList;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * @author LinP *网络爬虫 * 网页爬虫:其实就是一个程序用于在互联网中获取符合指定规则的数据。 * 爬取需要获取的信息。 */public class RegexDemo4 {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {// TODO 自动生成的方法存根//getMailAddress();getMailAddressByWeb();}private static void getMailAddressByWeb() throws IOException {// TODO 自动生成的方法存根URL url = new URL("http://bbs.itheima.com/thread-200600-1-1.html");BufferedReader bufr = new BufferedReader(new InputStreamReader(url.openStream()));Pattern p = Pattern.compile("\\w+(\\.\\w+)+");String line = null;while((line = bufr.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}private static void getMailAddress() throws IOException {//1. 读取源文件。BufferedReader bufr = new BufferedReader(new FileReader("C:/Users/LinP/Desktop/gaoxin/3-反射/3-反射.html"));//2. 对读取的数据进行规则的匹配。从中获取符合规则的数据。Pattern p = Pattern.compile("\\b\\.[a-zA-Z]{6}\\b");ArrayList<String> list = new ArrayList<String>();String line = null;while((line = bufr.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}}
结果:
美好的一天!
-
- 12章 正则表达式
- 正则表达式12
- 【正则表达式】正则表达式
- Python入门教程-12 正则表达式
- python基础-12-正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 移动GIS作业之onActivityResult使用
- Android Application详解
- JDBC问题总结
- 孪生素数问题
- Cocos2d-x中的坐标系
- 正则表达式12
- PAT 数据结构 04-树4. Root of AVL Tree (25)
- vim 复制
- cocos2d-js(一)引擎的工作原理和文件的调用顺序
- win32汇编 数据类型及定义
- 在樱花vps上安装win系统(下)
- 有趣的数
- windows平台多线程同步之Mutex的应用
- 自定义二级联动