Java学习笔记——正则表达式
2017-05-03 01:52
274 查看
Java正则表达式
正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
一、正则表达式语法
正则表达式语法二、Pattern类和Matcher类
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现。一个简单的demo
package test; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest1 { public static void main(String[] args) { Pattern p = Pattern.compile("\\w+"); System.out.println(p.pattern()); /** * 运行结果:\w+ */ } }
1.Pattern.split(CharSequence input)
Pattern有一个split(CharSequence input)方法,用于分隔字符串,并返回一个String[],我猜String.split(String regex)就是通过Pattern.split(CharSequence input)来实现的.package test; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest2 { public static void main(String[] args) { Pattern p = Pattern.compile("\\d+"); String[] str = p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com"); for(String s:str){ System.out.println(s); } /** * 我的QQ是: 我的电话是: 我的邮箱是:aaa@aaa.com */ } }
2.Pattern.matcher(String regex,CharSequence input)
Pattern.matcher(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.package test; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest3 { public static void main(String[] args) { System.out.println(Pattern.matches("\\w+","aaaa")); System.out.println(Pattern.matches("\\w+","aaaa1111")); System.out.println(Pattern.matches("\\w+","aaaa1111!@")); /** * 运行结果:true true false */ } }
3.Pattern.matcher(CharSequence input)
说了这么多,终于轮到Matcher类登场了,Pattern.matcher(CharSequence input)返回一个Matcher对象.Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest4 { public static void main(String[] args) { Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("22bb23"); System.out.println(m.pattern()); /** * 运行结果:\d+ */ } }
4.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回falsematches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest5 { public static void main(String[] args) { Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("22bb23"); System.out.println(m.matches()); //输出false Matcher m2 = p.matcher("2233"); System.out.println(m2.matches()); //输出true } }
我们现在回头看一下Pattern.matcher(String regex,CharSequence input),它与下面这段代码等价
Pattern.compile(regex).matcher(input).matches()
lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest5 { public static void main(String[] args) { Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("22bb23"); System.out.println(m.lookingAt()); //true Matcher m2 = p.matcher("a233"); System.out.println(m2.lookingAt()); //false } }
find()对字符串进行匹配,匹配到的字符串可以在任何位置.
package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest5 { public static void main(String[] args) { Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("22bb23"); System.out.println(m.find()); //true Matcher m2 = p.matcher("a233"); System.out.println(m2.find()); //true } }
更多方法可以查看API。
三、常用正则表达式
package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by zengzehao on 17-5-3. */ public class RegexTest6 { public static void main(String[] args) { Pattern p = Pattern.compile("^[\\u0391-\\uFFE5]+$");//一个或多个汉字 Matcher m = p.matcher("我是谁"); System.out.println(m.matches()); //true Pattern p2 = Pattern.compile("^[1-9]\\d{5}$"); //邮政编码 Matcher m2 = p2.matcher("516434"); System.out.println(m2.matches()); //ture Pattern p3 = Pattern.compile("^[1-9]\\d{4,10}"); //QQ号码 Matcher m3 = p3.matcher("993528424"); System.out.println(m3.matches()); //true Pattern p4 = Pattern.compile("^([a-zA-Z0-9-_])+@([a-zA-Z0-9-_])+\\.([a-zA-Z0-9-_])+$"); //邮箱,参考 Matcher m4 = p4.matcher("993528424@qq.com"); Matcher m5 = p4.matcher("14zhzeng@stu.edu.cn"); System.out.println(m4.matches()); //true System.out.println(m.matches()); //true Pattern p5 = Pattern.compile("^[a-zA-Z][a-zA-Z0-9_]+$"); //用户名(字母开头 + 数字/字母/下划线) Matcher m6 = p5.matcher("zheng14"); System.out.println(m6.matches()); //true Pattern p6 = Pattern.compile("^1[3|4|5|8][0-9]\\d{8}"); //手机号码 Matcher m7 =p6.matcher("13411984877"); System.out.println(m7.matches()); //ture Pattern p7 = Pattern.compile("^((http|https)://)?([\\w-]+\\.)+[\\w-]+(/[\\w -./?%&=]*)?$ "); //URL地址 Matcher m8 = p7.matcher("http://www.baidu.com"); System.out.println(m7.matches()); //ture Pattern p8 = Pattern.compile("^(\\d{6})(18|19|20)?(\\d{2})([01]\\d)([0123]\\d)(\\d{3})(\\d|X|x)?$");; //身份证 Matcher m9 = p8.matcher("441521199708244456"); System.out.println(m9.matches()); //true } }
相关文章推荐
- Java学习笔记-正则表达式
- 黑马程序员 java学习笔记--正则表达式
- java学习笔记06--正则表达式
- Java学习笔记之正则表达式
- java正则表达式学习笔记(三)
- java正则表达式学习笔记
- 黑马程序员——学习笔记13.Java正则表达式
- java学习笔记(六) -- 正则表达式
- 11. JAVA常用类库 Part 5 (正则表达式、定时调度、本章要点) ----- 学习笔记
- 黑马程序员 java学习笔记——正则表达式
- Java学习笔记-正则表达式的模式匹配
- java正则表达式学习笔记(四)
- 黑马程序员------java学习笔记之正则表达式
- java 学习笔记之正则表达式
- java正则表达式学习笔记(一)
- java学习笔记06--正则表达式
- 类字符串java学习笔记06--正则表达式
- java学习笔记---正则表达式
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<正则表达式>(三十一)
- Java正则表达式学习笔记,分离网页邮件地址的蜘蛛程序