【韦德国际1946国际网址】正则表明式学习,正则

作者: 韦德国际1946国际网址  发布:2019-05-28

1、 Java正则表明式

java学习——《正则说明式》,java《正则表明式》

/*不行使正则验证*/

【韦德国际1946国际网址】正则表明式学习,正则表明式。String str ="1234567890";

booleanflag =true;

charc[] = str.toCharArray();//将字符串变为字符数组

for(inti =0; i < c.length; i ) {

if(c[i] <'0'|| c[i] >'玖'){//判别每种字符是或不是是0~玖

flag =false;// 即使不是则脱离循环,并做下标识

break;

}

}

if(flag){

System.out.println("是由数字组成!");

}else{

System.out.println("不是由数字构成!");

}

/*动用正则验证*/

String str ="1234567890";

if(Pattern.compile("[0-9] ").matcher(str).matches()) {//使用正则验证

System.out.println("是由数字组成!");

}else{

System.out.println("不是由数字构成!");

}

正则表达式中元字符的用法:

    在先后开采中,难免会蒙受需求万分、查找、替换、决断字符串的情事时有发生,而那几个情形临时又相比复杂。 因而,学习及使用正则表明式,便成了缓慢解决那一争执的要害招数。

正则表达式

1、有如此三个需要,推断3个qq号是还是不是合法?它的长度只可以在五-14人,并且只可以是数字,0不能够开首,使用规则语句做判别,能够如此做

韦德国际1946国际网址 1

    /*
     * 需求:校验qq号
     * 要求:长度5-15;只能是数字;0不能开头
     */
    public static void checkQQ(String qq){
        int length=qq.length();
        if(length>=5&&length<=15){
            if (!qq.startsWith("0")) {
                try {
                    Long l=Long.parseLong(qq);
                    System.out.println("正确!");
                } catch (NumberFormatException e) {
                    System.out.println(qq ":不是数字错误!");
                }
            }else {
                System.out.println(qq ":0开头错误!");
            }
        }else {
            System.out.println(qq ":长度错误!");
        }
    }

View Code

在正则表明式前面,它显而易见有个别麻烦,不过它依然有优点正是易读,很轻松看懂代码意思。

选拔正则表明式,代码就成为了

韦德国际1946国际网址 2

    public static void checkQQByRegex(String qq){
        String regex="[1-9][0-9]{4,14}";
        boolean b=qq.matches(regex);
        System.out.println(qq ":" b);
    }

View Code

轻松的正则表达式,却不易于读懂,因而大家供给记许多标识代表的乐趣。

 

二、一些常用须要纪念的标记

字符类

[abc]

abc(简单类)

[^abc]

其余字符,除了 abc(否定)

[a-zA-Z]

azAZ,六头的字母包涵在内(范围)

[a-d[m-p]]

admp[a-dm-p](并集)

[a-z&&[def]]

def(交集)

[a-z&&[^bc]]

az,除了 bc[ad-z](减去)

[a-z&&[^m-p]]

az,而非 mp[a-lq-z](减去)

预约义字符类

.

其他字符(与行终止符或许万分也大概不包容)

d

数字:[0-9]

D

非数字: [^0-9]

s

空白字符:[ tnx0Bfr]

S

非空白字符:[^s]

w

单词字符:[a-zA-Z_0-9]

W

非单词字符:[^w]

边界相称器

^

行的起始

$

行的末尾

b

单词边界

B

非单词边界

A

输入的上马

G

上三个格外的终极

Z

输入的末尾,仅用于最后的终止符(假诺有个别话)

z

输入的尾声

Greedy 数量词

X?

X,贰次或二遍也不曾

X*

X,零次或频仍

X

X,贰遍或频仍

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

X,至少 n 次,然则不超越 m

 

三、常用功用

  一、相配:其实就是String类中matches方法

韦德国际1946国际网址 3

/*
     * 匹配功能
     * 需求:校验手机号
     * 要求:11位,开头13、15、18
     */
    public static void fun1() {
        String phone="13511110000";
        String regex="1[358]\d{9}";//等同于String regex="1[358][0-9]{9}"
        boolean b=phone.matches(regex);
        System.out.println(phone ":" b);
    }

View Code

  二、替换:其实便是String类中replaceAll方法,不是replace方法

韦德国际1946国际网址 4

/*
     * 替换功能
     * 需求:将已知电话号码,替换成形如152****0000
     */
    public static void fun3() {
        String phone="15200001111";
        String newPhone=phone.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2");//$1取前一个表达式中第一组
        System.out.println(newPhone);

    }

View Code

  三、切割:其实正是String类中split方法

韦德国际1946国际网址 5

/*
     * 切割功能
     * 需求:从字符串叠词部分切割
     */
    public static void fun2() {
        String s="张三@@@李四aaa王五";
        String regex="(.)\1 ";//.任意字符,()组,1取第一组, 至少出现一次
        String strs[]=s.split(regex);
        for (String string : strs) {
            System.out.println(string);
        }
    }

View Code

  四、获取:为了String类方便提供了地方方法,其实底层都是应用了Pattern类

韦德国际1946国际网址 6

    /*
     * 获取功能
     * 需求:获取“da jia hao,wo shi zhang san!”中三个字母组成的字符串
     */
    public static void fun4() {
        String s="da jia hao,wo shi zhang san!";
        String regex="\b[a-z]{3}\b";//单词边界b
        Pattern p=Pattern.compile(regex);//将正则封装成对象
        Matcher m=p.matcher(s);//绑定字符串获取匹配器
        //使用匹配器的find方法
        while (m.find()) {//find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
            System.out.println(m.group());//返回由以前匹配操作所匹配的输入子序列。
        }
    }

View Code

四、练习

  1、治口吃

韦德国际1946国际网址 7

/*
     * 需求:治口吃
     */
    public static void kouchi() {
        String s="我我我我....要要要要要要...学学..加..瓦!";
        //第一步替换...
        String s2=s.replaceAll("\. ", "");
        //第二部替换叠词
        String s3=s2.replaceAll("(.)\1 ", "$1");
        System.out.println(s3);
    }

View Code

  二、对ip地址排序

韦德国际1946国际网址 8

    /*
     * 需求:对ip地址进行排序
     */
    public static void ipSort() {
        String s="192.168.0.1   127.0.0.1  133.1.1.1 88.0.192.1";
        Set<String> set=new TreeSet<String>();//使用treeset排序的功能
        //截取字符串,放入set中,因为字符长度不同,所以排序失败,所以需要补0
        s=s.replaceAll("(\d )", "00$1");//00127.000.000.001
        //保留3位数
        s=s.replaceAll("\d (\d{3})", "$1");//088.000.192.001
        String strs[]=s.split("  ");
        for (String string : strs) {
            set.add(string);
        }
        for (String str : set) {
            //去除0打头和两位0
            str=str.replaceAll("0{1,2}(\d )", "$1");
            System.out.println(str);
        }
    }

View Code

  三、对邮箱实行校验

韦德国际1946国际网址 9

/*
     * 邮箱地址校验
     */
    public static void checkMail() {
        String mail="[email protected]";
        String regex="\[email protected]\w (\.\w ) ";
        boolean b=mail.matches(regex);
        System.out.println(mail ":" b);

    }

View Code

  肆、网页爬虫获取邮箱

韦德国际1946国际网址 10

    /*
     * 网页爬虫获取邮箱
     */
    public static List<String> getMail(String addr) throws Exception {
        URL url=new URL(addr);
        BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream()));//获取输入流
        Pattern p=Pattern.compile("\[email protected]\w (\.\w ) ");//封装
        Matcher m=null;
        String s=null;
        List<String> mails=new ArrayList<String>();
        while ((s=br.readLine())!=null) {
            m=p.matcher(s);//绑定字符串
            while (m.find()) {
                mails.add(m.group());
            }
        }
        return mails;
    }

View Code

正则表明式 一、有诸如此类贰个供给,判定贰个qq号是还是不是合法?它的尺寸只幸好5-1多少人,并且只...

韦德国际1946国际网址 11

一、元字符的用法

正则表明式是壹种能够用来格局匹配和替换的正经,二个正则表明式就是由经常的字符(举个例子字符a到z)以及特殊字符(元字符)组成的文字形式,它用于描述在搜寻文字主体时待相称的3个或三个字符串。正则表达式作为一个模板,将有些字符情势与所找出的字符串举办相称。
    自从jdk壹.4推出java.util.regex包,为大家提供了很好的JAVA正则表明式应用平台。

韦德国际1946国际网址 12

元字符 说明
. 匹配任何单个字符。例如正则表达式“b.g”能匹配如下字符串:“big”,“bug”,“b g”,但不能匹配“buug”
$ 匹配任何结束符。例如正则表达式“EJB$”能够匹配字符串“I like EJB”的末尾,但是不能匹配字符串“J2EE Without EJBs!”
^ 匹配一行的开始。例如正则表达式“^Spring”能够匹配字符串“Spring is a J2EE”的开始,但是不能匹配“I use Spring in my project”
* 匹配0至多个在它之前的字符。例如正则表达式“zo*”能匹配“z”以及“zoo”;正则表达式“.*”意味着能够匹配任意字符串
转义符,用来将元字符当作普通的字符来进行匹配。例如正则表达式$被用来匹配美元符号,而不是行尾;正则表达式.用来匹配点字符,而不是任何字符的通配符
[] 匹配括号中的任何一个字符。例如正则表达式“b[aiu]”匹配bag,big和bug,但是不匹配beg。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”就可以匹配“a0c”,“a1c”,“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母。还有一个相配合使用的元字符“^”,用在这里并不像前边的那个“^”一样表示匹配行开始,而是表示排除,例如“[&163A-Z]”将能够匹配除了1,6,3和所有大写字母之外的任何字符
() 将()之间括起的表达式定义为组(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。
| 将两个匹配条件进行逻辑“或”运算。“z|food”能匹配“z”或“food”。“(z|f)ood”则能匹配“zood”或“food”
匹配前面的子表达式,1次或多次。例如正则表达式9 匹配9,99,999等
匹配前面的子表达式,0次或多次,例如,“do(es)?”可以匹配“do”或“does”中的“do”。此元字符还有另外一个用途,就是表示非贪婪模式匹配
{n} 匹配确定的n次。例如,“e{2}”不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”
{n,} 至少匹配n次。例如“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeed”中的所有“e”
{n,m} 最少匹配n次且最多匹配m次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”

2、 正则发挥式

String类对正则表明式的支撑:

韦德国际1946国际网址 13

 

   尽管想清楚有个别许种正则说明式,则足以观望java.util.regex包中的Pattern类,里面列出了方方面面的正则表明式内容。

二、Java中的正则表达式API

壹.逻辑运算符:

jdk1.四起来提供了支撑正则表明式的API,它们放在java.util.regex包中。此前的版本,则要求借助第1方库。

|:管道符.如:x|y表示x或y

java.util.regex中定义了有个别表达式的简写,能够使得表达式显得越发简明和明晰

():捕获组.(abc)|(xyz)表示abc或xyz

t 制表符,等同于u0009
n 换行符,等同于u000A
d 代表一个数字,等同于[0-9]
D 代表非数字,等同于[^0-9]
s 代表换行符,制表符等空白字符
S 代表非空白字符
w 字母字符,等同于[a-zA-Z_0-9]
W 非字母字符,等同于[^w]

二.境界相称符:

 

^:从头相配

三,正则表明式的行使。

$:从尾相称

日前是基础,特别重大,因而特意抄了三次。

三.在正则表达式中兼有特有含义的字符

代码相对来讲反而轻易:

特殊字符

描述

    .

    表示任意一个字符

    [abc]

    表示a、b或c中的任意一个字符

    [^abc]

    除a、b和c以外的任意一个字符

    [a-zA-z]

    介于a到z,或A到Z中的任意一个字符

    s

    空白符(空格、tab、换行、换页、回车)

    S

    非空白符

    d

    任意一个数字[0-9]

    D

    任意一个非数字[^0-9]

    w

    词字符[a-zA-Z_0-9]

    W

    非词字符

{

//匹配

System.out.println( Pattern.matches("[0-9]{6}", "100830") );//true

System.out.println( Pattern.matches("\d{6}", "123456"));//true

}

{

//提取文件名

String regEx = ". /(. )$";//这儿()表示分组的概念,分组的索引是从1开始的,

                          //因此后面取得第一个分组的方法是m.group(1)

String strpath = "c:/dir1/dir2/name.txt";

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(strpath);

if(m.find())

    System.out.println(m.group(1));//name.txt

else

    System.out.println("文件格式错误!");

}

 

{

//字符替换

String regEx = "a ";

Pattern p =  Pattern.compile(regEx);

Matcher m = p.matcher("okaaaa LetmeAseeaaa aa booa");

String s = m.replaceAll("A");

System.out.println(s);//okA LetmeAseeA A booA

}

 

{

//验证身份证号

System.out.println(Pattern.matches("\d{15}|\d{18}", "123456789012345"));    //true

}

 

 

4.意味着字符出现次数的暗号

{

//中文提取

String f = "welcome to china, 靠山啊,yes,谢谢!"    ;

Pattern p = Pattern.compile("[\u4E00-\u9FFF] ");

Matcher matcher = p.matcher(f);

StringBuffer sb = new StringBuffer();

while(matcher.find())

{

    sb.append(matcher.group());

}

System.out.println(sb);

}

表示次数的符号

描述

    *

    0 次或者多次

   

    1 次或者多次

    ?

    0 次或者 1 次

    {n}

    恰好 n 次

    {n, m}

    至少 n 次,不多于 m 次

 

三、 实例

//验证Email

private static void validateEmail(String mail)

{

    Pattern p = Pattern.compile("[a-zA-Z0-9] @[a-zA-Z0-9] \.[a-zA-Z0-9] ");

    Matcher m = p.matcher(mail);

    if(m.matches())

    {

        System.out.println("合法的email");

    }

    else

    {

        System.out.println("非法的email");

    }

}

public static void main( String[] args )

{

    validateEmail("email@mail.com");

    validateEmail("www.baidu.com");    

}

1.字符串包括验证
//查找以Java发轫,任意结尾的字符串
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java是一门编制程序语言");
boolean b= matcher.matches();

 

//当条件满意时,将重返true,不然再次回到false
System.out.println(b);

 

2. 多规格分割字符串
Pattern pattern = Pattern.compile("[, |] ");
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (int i=0;i<strs.length;i ) {
    System.out.println(strs[i]);}

 

叁.文字替换(第三遍出现字符)
Pattern pattern = Pattern.compile("正则表明式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表明式 Hello World");
//替换第二个符合正则的多寡
System.out.println(matcher.replaceFirst("Java"));

 

四.文字替换(全体)
Pattern pattern = Pattern.compile("正则表明式");
Matcher matcher = pattern.matcher("正则表明式 Hello World,正则表明式 Hello World");
//替换第一个符合正则的数目
System.out.println(matcher.replaceAll("Java"));

以下例子为深入分析ULacrosseL

伍.文字替换(置换字符)
Pattern pattern = Pattern.compile(“正则表明式”);
Matcher matcher = pattern.matcher(“正则表明式 Hello World,正则表明式 Hello World ”);
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sbr, “Java”);
}

 

public class URLInfo

{

    private String protocal;

    private String path;

    private String host;

    public URLInfo()

    {

        super();

    }

    public String getHost()

    {

        return host;

    }

    public void setHost(String host)

    {

        this.host = host;

    }

    public String getPath()

    {

        return path;

    }

    public void setPath(String path)

    {

        this.path = path;

    }

    public String getProtocal()

    {

        return protocal;

    }

    public void setProtocal(String protocal)

    {

        this.protocal = protocal;

    }



}

 

public class Reg08ExtractURL

{

    public static void main(String[] args)

    {

        URLInfo urlinfo = parseURL("ftp://www.ftp.com/incoming/movie.rm");

        System.out.println(String.format("protocal:%s, host:%s, path:%s",

                urlinfo.getProtocal(), urlinfo.getHost(), urlinfo.getPath()));

 

        URLInfo urlinfo2 = parseURL("http://www.163.com/index.jsp?userId=00333");

        System.out.println(String.format("protocal:%s, host:%s, path:%s",

                urlinfo2.getProtocal(), urlinfo2.getHost(), urlinfo2.getPath()));

    }



    private static URLInfo parseURL(String url)

    {

        Pattern p = Pattern.compile("([a-zA-Z] )://([^/:] )([^#]*)");

        Matcher mat = p.matcher(url);

        mat.find();

        URLInfo info = new URLInfo();

        info.setProtocal(mat.group(1));

        info.setHost(mat.group(2));

        info.setPath(mat.group(3));

        return info;

    }

}

六.验证是还是不是为邮箱地址
String email=“[\w\.\-] @([\w\-] \.) [\w\-] ”;
String str=”ceponline@yahoo.com.cn”;
Pattern pattern = Pattern.compile(email,Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());

正如严厉的:

email="^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z]) ([-\w]*[0-9a-zA-Z])*\.) [a-zA-Z]{2,9})$"

七.网页时刻提取

    /**

     *

     *@Title:extractsDate

     *@Description:提取网页时间

     *@param  inputStr:2013-07-0113:38:16、2013年06月30日22:50:50、2013年07月01日13:46

本文由韦德国际1946发布于韦德国际1946国际网址,转载请注明出处:【韦德国际1946国际网址】正则表明式学习,正则

关键词: Java基础

上一篇:区域变色,方法的采纳详解
下一篇:没有了