转载自:http://butter.iteye.com/blog/1189600

1、正则表达式的知识要点
1、正则表达式是什么?
正则表达式是一种可以用于模式匹配和替换的强有力的工具。
2、正则表达式的优点?
更少的代码,更高的效率。
3、正则表达式如何使用?
在下面的教程中我们将学习到正则表达式的用法。
4、正则表达式的缺点?
需要花一定的时间学习,这个时间由个人决定,一天或者更久一些。
2、正则表达式的各种符号及其含义
常用的符号 . 表示任意一个字符
\s 空格字符(空格键, tab, 换行, 换页, 回车)
\S 非空格字符([^\s])
\d 一个数字,(相当于[0-9]  )
\D  一个非数字的字符,(相当于[^0-9] )
\w 一个单词字符(word character) (相当于 [a-zA-Z_0-9] )
\W 一个非单词的字符,[^\w]
^ 一行的开始
$ 一行的结尾
\b 一个单词的边界
\B 一个非单词的边界
\G 前一个匹配的结束
[] 匹配方括号内的一个字符
例如:[abc] 表示字符a,b,c中的任意一个(与a|b|c相同)
[a-zA-Z] 表示从a到z或A到Z当中的任意一个字符
表示次数的符号 * 重复零次或更多次
例如:a* 匹配零个或者多个a
+ 重复一次或更多次
例如:a+ 匹配一个或者多个a
? 重复零次或一次
例如:a? 匹配零个或一个a
{n} 重复n次
例如:a{4} 匹配4个a
{n,} 重复n次或更多次
例如:a{4,} 匹配至少4个a
{n,m} 重复n到m次
例如:a{4,10} 匹配4~10个a
 
2JAVA正则表达式实例教程                                                         12/11/2008
3、正则表达式实例
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现:
1、首先引入java包:java.util.regex
2、使用方法如下:
共分三步:
①构造一个模式.
Pattern p=Pattern.compile("[a-z]*");
②建造一个匹配器
Matcher m = p.matcher(str);
③进行判断,得到结果
boolean b = m.matches();
Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到
时返回true,没匹配到则返回false
①m.matches()
matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
②m.lookingAt()
lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返
回true
③m.find()
find()对字符串进行匹配,匹配到的字符串可以在任何位置
Matcher类的其他方法
int groupcount() 返回此匹配器模式中的捕获组数。
String replaceAll(String replacement) 用给定的replacement全部替代匹配的
部分
String repalceFirst(String replacement) 用给定的replacement 替代第一次匹
配的部分
appendReplacement(StringBuffer sb,String replacement)  根 据 模 式 用
replacement替换相应内容,并将匹配的结果添加到sb当前位置之后
StringBuffer appendTail(StringBuffer sb) 将输入序列中匹配之后的末尾字串
添加到sb当前位置之后.
group(n) 0代表永远都是匹配整个表达式的字符串的那部分 n<>0时代表
第n组匹配的部分
①字符匹配
    Pattern p = Pattern.compile(expression); // 正则表达式
    Matcher m = p.matcher(str); // 操作的字符串
    boolean b = m.matches(); //返回是否匹配的结果
    System.out.println(b);
    Pattern p = Pattern.compile(expression); // 正则表达式
3JAVA正则表达式实例教程                                                         12/11/2008
    Matcher m = p.matcher(str); // 操作的字符串
    boolean b = m. lookingAt (); //返回是否匹配的结果
    System.out.println(b);
    Pattern p = Pattern.compile(expression); // 正则表达式
    Matcher m = p.matcher(str); // 操作的字符串
    boolean b = m..find (); //返回是否匹配的结果
    System.out.println(b);
②分割字符串
Pattern pattern = Pattern.compile(expression); //正则表达式
String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组
③替换字符串
    Pattern p = Pattern.compile(expression); // 正则表达式
    Matcher m = p.matcher(text); // 操作的字符串
    String s = m.replaceAll(str); //替换后的字符串
④查找替换指定字符串
Pattern p = Pattern.compile(expression); // 正则表达式
    Matcher m = p.matcher(text); // 操作的字符串
    StringBuffer sb = new StringBuffer();
    int i = 0;
    while (m.find()) {
     m.appendReplacement(sb, str);
     i++;    //字符串出现次数
    }
    m.appendTail(sb);//从截取点将后面的字符串接上
String s = sb.toString();
⑤查找输出字符串
Pattern p = Pattern.compile(expression); // 正则表达式
    Matcher m = p.matcher(text); // 操作的字符串
    while (m.find()) {
 //m.start() 返回匹配到的子字符串在字符串中的索引位置. 
 //m.end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
 //m.group()返回匹配到的子字符串 
}
4JAVA正则表达式实例教程                                                         12/11/2008
3、下面通过几个例子来理解一下正则表达式的妙用
3.1 匹配字符串(matches()方法)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest{
static void test(){
Pattern p = null; //正则表达式     
    Matcher m = null; //操作的字符串 
    boolean b = false;
    //正则表达式表示首字母是a,中间是任意字符,结尾以b结束
    //不匹配的结果
    p = Pattern.compile("a*b");   
m = p.matcher("baaaaab");   
b = m.matches();   
    System.out.println("匹配结果:"+b); //输出:true
 
    //匹配的结果
    p = Pattern.compile("a*b");   
m = p.matcher("aaaaab");   
b = m.matches();   
    System.out.println("匹配结果:"+b); //输出:false
}
public static void main(String argus[]){
test();
}
}
5JAVA正则表达式实例教程                                                         12/11/2008
3.2 判断手机号码(matches()方法)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest{
static void test(){
Pattern p = null; //正则表达式     
    Matcher m = null; //操作的字符串 
    boolean b = false;
    //正则表达式表示第一位是1,第二位为3或5,结尾为9位数字的一串数字
    p = Pattern.compile("^[1][3,5]+\\d{9}");   
m = p.matcher("13812345678");   
b = m.matches();   
    System.out.println("手机号码正确:"+b); //输出:true
 
    //
    p = Pattern.compile("[1][3,5]+\\d{9}");   
m = p.matcher("03812345678");//错误  首位为0
//m = p.matcher("13812345-7a");//错误  字符串中有字母或者字符
b = m.matches();   
    System.out.println("手机号码错误:"+b); //输出:false
}
public static void main(String argus[]){
test();
}
}
6JAVA正则表达式实例教程                                                         12/11/2008
3.3 身份证号码验证
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest{
static void test(){
Pattern p = null; //正则表达式     
    Matcher m = null; //操作的字符串 
    boolean b = false;
    //正则表达式表示15位或者18位数字的一串数字
    p = Pattern.compile("\\d{15}|\\d{18}");   
m = p.matcher("120101198506020080");   
b = m.matches();   
    System.out.println("身份证号码正确:"+b); //输出:true
 
    //
    p = Pattern.compile("\\d{15}|\\d{18}");   
m = p.matcher("020101198506020080");//错误  首位为0
b = m.matches();   
    System.out.println("身份证号码错误:"+b); //输出:false
}
public static void main(String argus[]){
test();
}
}
7JAVA正则表达式实例教程                                                         12/11/2008
3.4 email验证
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest{
static void test(){
Pattern p = null; //正则表达式     
    Matcher m = null; //操作的字符串 
    boolean b = false;
    //正则表达式表示邮箱号码
    p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+
([-.]\\w+)*");   
m = p.matcher("user@test.com");   
b = m.matches();   
    System.out.println("email号码正确:"+b); //输出:true
 
    //
    p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+
([-.]\\w+)*");   
m = p.matcher("user.test.com");//错误  @应为.
b = m.matches();   
    System.out.println("email号码错误:"+b); //输出:false
}
public static void main(String argus[]){
test();
}
}
8JAVA正则表达式实例教程                                                         12/11/2008
3.5 IP地址检查
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest{
static void test(){
Pattern p = null; //正则表达式     
    Matcher m = null; //操作的字符串 
    boolean b = false;
    //正则表达式表示邮箱号码
    p =
Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");   
m = p.matcher("192.168.1.1");   
b = m.matches();   
    System.out.println("IP正确:"+b); //输出:true
 
    //
    p =
Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");   
m = p.matcher("192.168.1.1234");//错误  应该为3位不应该是4位
b = m.matches();   
    System.out.println("IP错误:"+b); //输出:false
}
public static void main(String argus[]){
test();
}
}
9JAVA正则表达式实例教程                                                         12/11/2008
3.6 中文名
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest{
static void test(){
Pattern p = null; //正则表达式     
    Matcher m = null; //操作的字符串 
    boolean b = false;
    //正则表达式表示汉字的一串字符串
    p = Pattern.compile("^[\u4e00-\u9fa5]+$");   
m = p.matcher("貂禅");   
b = m.matches();   
    System.out.println("中文名正确:"+b); //输出:true
 
    //
    p = Pattern.compile("^[\u4e00-\u9fa5]+$");   
m = p.matcher("nick");//错误  只能是中文
b = m.matches();   
    System.out.println("中文名错误:"+b); //输出:false
}
public static void main(String argus[]){
test();
}
}
10JAVA正则表达式实例教程                                                         12/11/2008
3.7 字符串匹配的返回
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest {
static void test() {
/**
 * start()返回匹配到的子字符串在字符串中的索引位置. 
 * end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
 * group()返回匹配到的子字符串 
 */
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("aaa2223bb11222"); 
while(m.find()){
System.out.println(m.start());//第一个循环返回3,第二个循环返回

System.out.println(m.end());//返回7,第二个循环返回14
System.out.println(m.group());//返回2233,第二个返回11222
}
  }
public static void main(String argus[]) {
test();
}
}
11JAVA正则表达式实例教程                                                         12/11/2008
3.8 groupCount、group()、group(n)的用法
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest {
static void test() {
/*
 * 本例groupCount将返回三组a11bbb、11、bbb
 */
Pattern p=Pattern.compile("\\w(\\d\\d)(\\w+)");
Matcher m=p.matcher("aa11bbb");
        if(m.find()){   
            int count = m.groupCount(); //返回匹配组的数目,而不是匹配字符串
的数目
            for(int i = 0; i <= count; i++)   
                System.out.println("group " + i + " :" + m.group(i));
        }   
  }
/*
 * 返回结果如下
 * group 0 :a11bbb
 * group 1 :11
 * group 2 :bbb
 */
public static void main(String argus[]) {
test();
}
}
12JAVA正则表达式实例教程                                                         12/11/2008
3.9 分割字符串(split ()方法)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest {
static void test() {
Pattern p=Pattern.compile("\\d+"); //将所含数字去掉
String str[] = p.split("aa11bbb33cc55gg");
   for (int i = 0; i < str.length; i++) {
    System.out.println(str[i]);
}
  }
/*
 * 返回结果如下
 * aa
 * bbb
 * cc
 * gg
 */
public static void main(String argus[]) {
test();
}
}
13JAVA正则表达式实例教程                                                         12/11/2008
3.10 字符串替换(replaceAll()方法)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest {
static void test() {
Pattern p = Pattern.compile("\\d+"); //将所含数字全部替换为XX
Matcher m = p.matcher("aa11bbb33cc55gg");
String str = m.replaceAll("XX");
System.out.println(str);
  }
/*
 * 返回结果如下
 * aaXXbbbXXccXXgg
 */
public static void main(String argus[]) {
test();
}
}
14JAVA正则表达式实例教程                                                         12/11/2008
3.11 字符串替换2(appendReplacement()方法及appendTail()方法)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest {
static void test() {
Pattern p = Pattern.compile("55");
Matcher m = p.matcher("aa11bbb33cc55gg55yy");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "@@");//用@@替换所有的55
}
System.out.println(sb.toString());//打印aa11bbb33cc@@gg@@
m.appendTail(sb);//将最后一次替换后的字符串加上
System.out.println(sb.toString());//打印aa11bbb33cc@@gg@@yy
}
/*
 * 返回结果如下 aa11bbb33cc@@gg@@、aa11bbb33cc@@gg@@yy
 */
public static void main(String argus[]) {
test();
}
}
15JAVA正则表达式实例教程                                                         12/11/2008
4、常用的正则表达式
//email 正确的书写格式为 username@domain
static String _email  = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+
([-.]\\w+)*";
//电话 正确格式 012-87654321、0123-87654321、0123-7654321
static String _tel    =
"\\d{4}-\\d{8}|\\d{4}-\\d{7}|\\d(3)-\\d(8)";
//手机号码 13187654321 13587654321
static String _phone  = "^[1][3,5]+\\d{9}";
//汉字 中国
static String _chinse = "^[\u4e00-\u9fa5]+$";
//IP 192.168.1.1
static String _ip     =
"\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}";
//QQ 456789
static String _qq     = "[1-9][0-9]{4,13}";
//邮编 210000
static String _mail   = "[1-9]\\d{5}(?!\\d)";
//身份证号码 15或者18位
static String _id     = "\\d{15}|\\d{18}";
5、结尾
1、通过以上的学习,大家可能对正则表达式有了初步的了解和认识,大家在以后的学
习和工作中逐渐加深对Java正则表达式的理解,一定会在编程的过程中起到很大作用。

[转载]java正则表达式的更多相关文章

  1. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  2. java正则表达式应用--验证字符串是否为数字(转载)

    首先说一下java正则表达式的重点概念: 第一.相关类:Pattern.Matcher 第二.典型的调用顺序是 Pattern p = Pattern.compile("a*b") ...

  3. 转载:JAVA 正则表达式 (超详细)

    在Sun的JavaJDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用Java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x ...

  4. JAVA 正则表达式 (超详细)

    (PS:这篇文章为转载,我不喜欢转载的但我觉得这篇文章实在是超赞了,就转了过来,这篇可以说是学习JAVA正则表达的必读篇.作者是个正真有功力的人,阅读愉快) 在Sun的Java JDK 1.40版本中 ...

  5. java 正则表达式提取html纯文本

    本文来自我的个人博客: java 正则表达式提取html纯文本 做内容的大家都知道,从html中直接提取纯文本是一个非常大的问题.现将我做的正则匹配贴上: import java.util.regex ...

  6. Java正则表达式教程及示例

    本文由 ImportNew - ImportNew读者 翻译自 journaldev.欢迎加入翻译小组.转载请见文末要求. [感谢 @CuGBabyBeaR  的热心翻译.如果其他朋友也有不错的原创或 ...

  7. Java-Runoob:Java 正则表达式

    ylbtech-Java-Runoob:Java 正则表达式 1.返回顶部 1. Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某 ...

  8. java 正则表达式 验证邮箱

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class demo1 { /**java正则表达式 * ...

  9. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

随机推荐

  1. Excel 26机制转换

    [问题描述] 在Excel中,列的名称是这样一个递增序列:A.B.C.….Z.AA.AB.AC.….AZ.BA.BB.BC.….BZ.CA.….ZZ.AAA.AAB….我们需要将上述列名序列和以下自然 ...

  2. 转!!java 堆栈内存 对象实例等查看

    https://blog.csdn.net/fenglibing/article/details/6411999

  3. The Accomodation of Students---hdu2444(二分图,最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:有n个学生,m个关系,但是如果a认识b,b认识c,但是a不一定认识c: 求能不能把这n个人 ...

  4. Python开发【笔记】: __get__和__getattr__和__getattribute__区别

    引言: 1.object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. 2.objec ...

  5. BaseLayout

    angularjs2 knockoutjs framework7 jquerymobile bootstrap html5 css [Activity(Label = "ActivityBa ...

  6. saltstack master minion 配置文件

    Master端的配置是修改/etc/salt下master配置文件.以下是Master端常用的配置. interface: 指定bind 的地址(默认为0.0.0.0) publish_port: 指 ...

  7. java模拟网页http-url访问

    package com.iflytek; import java.io.InputStream; import java.net.HttpURLConnection; import java.net. ...

  8. hadoop2.x Federation

    单Active NN的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NN进程使用的内存可能会达到上百G,NN成为了性能的瓶颈 常用的估算公式为1G对应1百万个块,按缺省块大 ...

  9. 经验搜索排名---google已经做过类似的了(我想多了)

    由于编程的原因,我们需要经常的查资料,现在转载的文章比较多,我们经常看到的搜索结果的前十名基本上有7名是转载的.这样看起来很没有效率,后来突然想到,如果把大家的浏览结果搜集起来,然后进行权重排名,这样 ...

  10. 4.4 Routing -- Specifying A Route's Model

    一.概述 应用程序中,templates被models支持.但是templates是如何知道它们应该显示哪个model呢? 例如,你有一个photos模板,它是如何知道它该呈现哪个model呢? 这就 ...