java正则表达式的使唤

示例代码:

package com.target.start;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
 * 正则表达式:符合一定规则的表达式,Pattern类,通俗的说就是用符号表示一定的字符规则。
 * 作用:用于专门操作字符串,可以简化对字符串的复杂操作,提高编程的效率。
 * 下面我们将介绍对正则表达式的具体操作,一般都得自己查表查到具体字符代表什么,这也是它的弊端,阅读性差
 * 特点:正则表达式操作起来简单,但是正则表达式的书写稍微有点困难
 */
public class test {

    public static void main(String[] args)
    {
        String a="a";
        String b="basdsf";
        String c="155511385";
        String d="02541454";
        String e="265156153153153153415";
        String f="abfsdfabfsdfabdasbfabhtr";
        String g="aaf  fsf     gdfger   fgerg";
        //匹配,由于具体的字符串太多,我们在此只给出几个例子,只要有一处不符合则返回false
        System.out.println("1.判断一个字符是否为a或b或c:"+a.matches("[abc]"));
        System.out.println("2.判断一个字符是否不为a或b或c:"+a.matches("![abc]"));
        System.out.println("3.判断一个字符是否是字母:"+a.matches("[a-z A-Z]"));
        System.out.println("4.判断一个字符是否是数字:"+a.matches("[0-9]"));
        System.out.println("5.判断是否为长度4到10的字母组成的字符串:"+a.matches("[a-z A-z]{4,10}"));
        System.out.println("6.判断是否为长度4到10的字母组成的字符串:"+b.matches("[a-z A-z]{4,10}"));
        System.out.println("7.判断是否为首字符不为0,后边的字符一共4到10位:"+c.matches("[1-9][0-9]{4,10}"));
        System.out.println("8.判断是否为首字符不为0,后边的字符一共4到10位:"+d.matches("[1-9][0-9]{4,10}"));
        System.out.println("9.判断是否为首字符不为0,后边的字符一共4到10位:"+e.matches("[1-9][0-9]{4,10}"));
        //替换
        System.out.println("10.替换符合正则表达式的所有字符为新字符:"+f.replaceAll("[a][b]", "#"));
        //获取,通过group操作
        String reg="[1][5][6]";//定义规则,找156的字符串
        Pattern p=Pattern.compile(reg);//将规则封装为对象
        Matcher m=p.matcher(e);//将正则对象和要作用的字符串相关联并获得匹配器对象
        while(m.find())//得先找到,才能获取
        {  //坐标从0开始,[start,end)半开半闭区间
            System.out.println("group:"+m.group());//获取字符串  156
            System.out.println("start:"+m.start());//开始位置  3
            System.out.println("end:"+m.end());//结束位置,包含头不包含尾  6
        }
        //切割,尤其是表达式的书写,多注意转义字符\,在此只给出一个了例子
        String[] h=g.split(" +");
        for(String x:h)
        {
            System.out.println("以多个空格进行切割:"+x);//十分重要
            /*以多个空格进行切割:aaf
              以多个空格进行切割:fsf
              以多个空格进行切割:gdfger
              以多个空格进行切割:fgerg
            */      
        }
    }
}

split("\\s+") 和 split(" +") 有什么区别?

  • \\s表示 空格,回车,换行等空白符,
  • +号表示一个或多个+前面字符

 常用语法:

"^The":匹配以"The"开始的字符串;
"en d$":匹配所以以"en d"结尾的字符串;
"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;

"ab*":匹配一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
"ab+":匹配一个a后面跟着至少一个b或者更多;
"ab?":匹配一个a后面跟着零个或者一个b;
"a?b+$":匹配末尾有零个或一个a跟着一个或几个b。

"[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b");
"[a-d]":表示一个字符串包含小写的'a''d'中的一个(相当于"a|b|c|d"或者"[abcd]");
"^[a-zA-Z]":表示一个以字母开头的字符串;
"[0-9]%":表示一个百分号前有一位的数字;
",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

"ab{2}":匹配字符串有一个a跟着2个b("abb");
"ab{2,}":匹配字符串有一个a跟着至少2个b;
"ab{3,5}":匹配字符串有一个a跟着3到5个b。

"hi| hello":表示一个字符串里有"hi"或者"hello";
"(b | cd)ef":表示"bef"或"cdef";
"(a | b)*c":表示一串"a""b"混合的字符串后面跟一个"c";
'.'可以替代任何字符:

"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位
为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转移字符'\'。
请注意在方括号中,不需要转义字符。

\d:代表一个数字,等同于[0-9]   如a[0-9]b   a\db
\D:代表非数字,等同于[^0-9]
\s:代表换行符、Tab制表符等空白字符 ,(空格、回车、制表符)
\S:代表非空白字符,等价于等价于 [^ \f\n\r\t\v]
\w:匹配字母或数字或下划线或汉字,即能组成单词的字符,除%&#@!$等字符。[a-zA-Z0-9_汉字]
\W:非\w ,等同于[^\w] %

经典匹配

"^\d+$"  //非负整数(正整数 + 0) 
"^[0-9]*[1-9][0-9]*$"  //正整数 
"^((-\d+)|(0+))$"  //非正整数(负整数 + 0) 
"^-[0-9]*[1-9][0-9]*$"  //负整数 
"^-?\d+$"    //整数 
"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0) 
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数 
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数 
"^(-?\d+)(\.\d+)?$"  //浮点数 
"^[A-Za-z]+$"  //由26个英文字母组成的字符串 
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串 
"^[a-z]+$"  //由26个英文字母的小写组成的字符串 
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 
"^\w+$"  //由数字、26个英文字母或者下划线组成的字符串 
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Emil
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"     //电话号码
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   //IP地址

^([0-9A-F]{2})(-[0-9A-F]{2}){5}$   //MAC地址的正则表达式
^[-+]?\d+(\.\d+)?$  //值类型正则表达式

  

posted @ 2019-07-17 10:05  芬乐  阅读(357)  评论(0编辑  收藏  举报