编程笔记_JAVA_正则表达式工具

导入类

java.util.regex.Pattern; //模式类:字符串要被匹配的模式

java.util.regex.Matcher;//匹配类:匹配某个字符串所产生的结果,一个字符串中可能有多处匹配

 

一、捕获组的概念【还不懂】

 

((A)(B(C)))

1 ((A)(B(C)))

2 (A)

3    (B(C))

4    (C)

 

二、关键函数

 

1、matches()和find()的区别

 

(1)匹配方式不一样

matches() 是拿整个输入的字符串和定义的正则模式匹配;

find() 是包含匹配, 整个输入的字符串包含定义的正则模式.

(2)调用顺序不一致, 结果也会不一致

(3) find()使用后,值会变化

 

二、示例程序

1、Pattern.compile("[0-9]+").matcher("1234567890").matches()

 

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

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

        }else{

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

        }

 

2、

        Pattern p = Pattern.compile(pat) ;    // 实例化Pattern类

        Matcher m = p.matcher(str) ;    // 实例化Matcher类

        if(m.matches()){        // 进行验证的匹配,使用正则

            System.out.println("日期格式合法!") ;

        }else{

            System.out.println("日期格式不合法!") ;

        }

 

3、带有find()和group()的用法

 

    public String getUserid(String iniWeibo) {

        String userid = null;

        Pattern puserid = Pattern.compile("href=\\\\\"http:\\\\/\\\\/weibo.com\\\\/u\\\\/[0-9]{10}");

        Matcher muserid = puserid.matcher(iniWeibo);

        if(muserid.find()){

            userid = muserid.group();

            userid = userid.substring(userid.indexOf("u")+3, userid.indexOf("u")+13);

        }

        return userid;

    }

 

三、String类自带的正则表达式操作

 

1、str.replaceAll(pat)

        String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ;

2、str.matches(pat)

        boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ;

3、str.split(pat)

 

        String s[] = "A1B22C333D4444E55555F".split("\\d+") ;

 

四、常用函数

 

1、p.split(str)

        String str = "A1B22C333D4444E55555F" ;    // 指定好一个字符串

        String pat = "\\d+" ;    // 指定好正则表达式

        Pattern p = Pattern.compile(pat) ;    // 实例化Pattern类

        String s[] = p.split(str) ;    // 执行拆分操作

 

2、m.replaceAll(str)

        String str = "A1B22C333D4444E55555F" ;    // 指定好一个字符串

        String pat = "\\d+" ;    // 指定好正则表达式

        Pattern p = Pattern.compile(pat) ;    // 实例化Pattern类

        Matcher m = p.matcher(str) ;    // 实例化Matcher类的对象

        String newString = m.replaceAll("_") ;//执行替换操作

 

五、需要注意的字符

 

\\\\\" ————————\" ———————— "

.+? -----------任意字符

\\d------------任意数字

\\|------------ |

 

六、重要匹配

 

\w 包括大小写字母和数字 \W

 

\s \S

\d 数字 \D 非数字

 

http://www.nowamagic.net/librarys/veda/detail/1038

贪婪匹配

    它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的

惰性匹配

    它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。

贪婪匹配

惰性匹配

匹配描述

?

??

匹配 0 个或 1

+

+?

匹配 1 个或多个

*

*?

匹配 0 个或多个

{n}

{n}?

匹配 n

{n,m}

{n,m}?

匹配 n 个或 m

{n,}

{n,}?

匹配 n 个或多个

 

单词边界匹配

    \bmagic\b,这个正则匹配,必须以m开头,以c为结尾的字符串。

    \b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。

 

边界的定义

    通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,值得注意的是,分隔符"-"也可以作为边界。

    边界的相对性:

当你对一个普通字符,比如"s",设定边界的时候,它的边界是诸如空格、分隔符、逗号、句号等。

当你对一个边界,比如分隔符"-"或者","等,设定边界的时候,它的边界是普通字符。

1

\b(,)\b

效果演示

welcome to nowamagic,this magic place!

 

匹配非单词边界——\B

匹配文本首 ^

匹配文本末 $

后向文本引用变换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值