正则表达式
2015-08-20 22:47
435 查看
----------android培训、java培训、java学习型技术博客、期待与您交流!------------
2、好处:对字符串的复杂操作变得更为简单。
3、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
4、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。
2、切割:string split(String reges)根据正则表达式的匹配拆分此字符串。
3、替换:String replaceAll(String reges ,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
4、获取:
(1)、将将正则表达式封装成对象。
(2)、让正则对象和要操作的字符串相关联。
(3)、关联后,获取正则匹配引擎。
(4)、通过引擎对符合规则的子串进行操作,比如取出。
----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、正则表达式的理解
1、定义:用来操作字符串的一些规则,符合一定规则的表达式。2、好处:对字符串的复杂操作变得更为简单。
3、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
4、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。
二、正则表达式的常见操作
1、匹配:boolean matches(String regex) 方法,(告知此字符串是否匹配给定的正则表达式)用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。/* 对手机号码进行匹配 手机号段只有 13xxx 15xxx 18xxxx,一共有11位 */ public class RegexDemo1 { public static void main(String[] args) { // 自定义一个任意格式的号码进行匹配。 String tel = "13850529145"; String telReg = "1[358]\\d{9}";// 定义用于验证的正则表达式 boolean flag = tel.matches(telReg); System.out.println(flag); } }
2、切割:string split(String reges)根据正则表达式的匹配拆分此字符串。
/* 对含有空格的字符串进行切割。 */ public class RegexDemo2 { public static void main(String[] args) { String str = "zhang li chae fed";// 定义一个含有空格的字符串。 String reg = " +";// 按照多个空格来进行切割。 String[] arr = str.split(reg);// 切割。 System.out.println(arr.length); for (String s : arr) {// 打印出数组中的每个元素。 System.out.println(s); } } }
3、替换:String replaceAll(String reges ,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
/* 对字符串进行替换。 */ public class RegexDemo3 { public static void main(String[] args) { String str = "erkktyqqquizzzzzo"; str.replaceAll("(.)\\1+", "$1");// 将叠词替换成$. //将重叠的字符替换成单个字母。zzzz->z } }
4、获取:
(1)、将将正则表达式封装成对象。
(2)、让正则对象和要操作的字符串相关联。
(3)、关联后,获取正则匹配引擎。
(4)、通过引擎对符合规则的子串进行操作,比如取出。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo { public static void main(String[] args) { String str = "ming tian you shi xin de yi tian"; System.out.println(str); String reg = "\\b[a-z]{3}\\b"; // 将规则封装成对象。 Pattern p = Pattern.compile(reg); // 让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m = p.matcher(str); while (m.find()) { System.out.println(m.group());// 用于获取匹配后结果。 System.out.println(m.start() + "...." + m.end()); } } }
三、正则表达式例子
1、对邮件地址进行校验public class CheckMail { public static void main(String[] args) { String mail = "abc12@sina.com"; String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";// 较为精确的匹配。 reg = "\\w+@\\w+(\\.\\w+)+";// 相对不太精确的匹配。 // mail.indexOf("@")!=-1 System.out.println(mail.matches(reg)); } }2、将下列字符串转成:我要学编程
/* 思路方式: 1,如果只想知道该字符是否对是错,使用匹配。 2,想要将已有的字符串变成另一个字符串,替换。 3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。 4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。 */ public class RegexText { public static void main(String[] args) { String str = "我我...我..我要..要要..要要..学学学...学学...编编...编程..程.程..程..程"; /* 将已有字符串变成另一个字符串。使用 替换功能。 1,可以先将 . 去掉。 2,在将多个重复的内容变成单个内容。 */ str = str.replaceAll("\\.", ""); System.out.println(str); str = str.replaceAll("(.)\\1+", "$1"); System.out.println(str); } }3、将ip地址进行地址段顺序的排序。
import java.util.TreeSet; /* 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30 将ip地址进行地址段顺序的排序。 还按照字符串自然顺序,只要让它们每一段都是3位即可。 1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。 2,将每一段只保留3位。这样,所有的ip地址都是每一段3位。 */ public class RegexText { public static void main(String[] args) { String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30"; ip = ip.replaceAll("(\\d+)", "00$1");// 将IP地址的每一段开头添加两个0。 System.out.println(ip); ip = ip.replaceAll("0*(\\d{3})", "$1");// 将IP地址的每一段只保留3位。 System.out.println(ip); String[] arr = ip.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"));// 将IP地址还原。 } } }4、网页爬虫
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexTest { public static void main(String[] args) { } /* 获取指定网址中的邮件地址。 使用获取功能。Pattern Matcher */ 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()); } } } }
四、小结
增长表达式是用于字符匹配,在邮箱格式验证上有广泛的应用。要熟记匹配的规则和操作,做好心中有数。----------android培训、java培训、java学习型技术博客、期待与您交流!------------
相关文章推荐
- java enum(枚举)使用详解 + 总结
- HTML【1】的学习,实用编程+代码
- 网页视图 UIWebView
- 辛星浅析PL/pgsql语法(上)
- QT下的几种透明效果
- TreeMap
- [Android]通过js方法回调部分native报错 Web Console: Uncaught TypeError: Object [object Object] has no method 'xxx'
- HDU 4035Maze(树状+概率dp,绝对经典)
- NOIP2010-普及组复赛-第一题-数字统计
- 利害唯己,谁贵谁贱
- android studio使用中遇到的问题记录
- Android学习之Bitmap对象与字节数组相互转换
- CCActionCatmullRom源码解析
- 奔跑吧,我的JavaScript(1)
- HashMap
- 使用ngrok作为外网映射工具
- Expected MultipartHttpServletRequest: is a MultipartResolver configured?
- Spring Spring基本配置和IOC
- Spring中Bean的基本用法
- 回收站linux实现