首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编程笔记_JAVA_正则表达式工具

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

作者头像
陈黎栋
发布2020-02-17 23:31:50
8540
发布2020-02-17 23:31:50
举报

导入类

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

匹配文本首 ^

匹配文本末 $

后向文本引用变换

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入类
  • 一、捕获组的概念【还不懂】
  • 二、关键函数
    • 1、matches()和find()的区别
    • 二、示例程序
    • 1、Pattern.compile("[0-9]+").matcher("1234567890").matches()
    • 2、
    • 3、带有find()和group()的用法
    • 三、String类自带的正则表达式操作
      • 3、str.split(pat)
      • 四、常用函数
      • 五、需要注意的字符
      • 六、重要匹配
        • \w 包括大小写字母和数字 \W
          • \d 数字 \D 非数字
            • 贪婪匹配
              • 惰性匹配
                • 单词边界匹配
                  • 边界的定义
                    • 匹配非单词边界——\B
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档