加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式从入门到精通

发布时间:2020-12-14 04:17:33 所属栏目:百科 来源:网络整理
导读:作者:华清远见讲师 一、学习目标: 1.概念 2.涉及类 3.入门示例 4.正则表达式组成规范 二、学习过程: 1.概念:“正则表达式”(Regular Expression)就是一个特殊的字符串,用来匹配字符串与查找字符串 2.涉及类: (1) Pattern 对象表示一个已编译的正则表达式

作者:华清远见讲师

一、学习目标:

1.概念

2.涉及类

3.入门示例

4.正则表达式组成规范

二、学习过程:

1.概念:“正则表达式”(Regular Expression)就是一个特殊的字符串,用来匹配字符串与查找字符串

2.涉及类:

(1) Pattern 对象表示一个已编译的正则表达式。Pattern 类没有提供公共的构造方法。 必须调用公共的静态 compile 方法,它将返回一个 Pattern 对象。

(2)Matcher 是一个靠着输入的字符串来解析这个模式和完成匹配操作的对象。 Matcher 也没有定义公共的构造方法,需要通过调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

(3)PatternSyntaxException 对象是一个未检查异常,指示了正则表达式中的一个语法错误。

3.入门示例:

3.1入门示例1:判断字符串是否以ax开头by结尾,并且中间有仅只有一个字符

public class Test {

public boolean m1(String str) {

// 方式一:

// Pattern p = Pattern.compile("ax.by");

// Matcher m = p.matcher(str);

// boolean b = m.matches();

// 方式二

boolean b = Pattern.matches("ax.by",str);//“.”匹配任意一个字符

return b;

}

public static void main(String[] args) {

Test t = new Test();

System.out.println(t.m1("axmby"));//true

}

}

3.2入门示例2:查找字符串中是否有算术运算符

private void m2() {

//"+|-|*|/|%"表示‘+’或‘-’或‘*’或‘/’或‘%’

Pattern p = Pattern.compile("+|-|*|/|%");

Matcher m = p.matcher("23+234-123*234/1000");

boolean b = m.find();

System.out.println(b);//true

}

3.3入门示例3:查找字符串中是否有两个数字组成的子字符串

private void m3() {

Pattern p = Pattern.compile("d{2}");//“d{2}”表示两个数字

Matcher m = p.matcher("aabbcc23sdf23");

System.out.println(m.find());//true

}

3.4入门示例4:根据两个数字的子字符串把字符串拆分成多个字符串的数组

public void m5() {

String s = "aa23bb13cc12dd90ee";

String[] a = s.split("d{2}");//“d{2}”表示两个数字

for (String string : a) {

System.out.print(string+” ”);

}

}

运行结束为:aa bb cc dd ee

4.上面示例中已经出现了四个按正则表达式规范组成的正则表达式,即"ax.by"、"+|-|*|/|%"、"d{2}",那么正则表达式的组成规范是什么呢?

4.1 格式为: 字符+次数

4.2、匹配字符的通配符

4.2.1. "." ---> 用于匹配一个任意的字符

比如: “t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”

Pattern p = Pattern.compile("a.b.c.d");

Matcher m = p.matcher("axbac2d");// 正则表达式 电话号号

boolean b = m.matches();// 判断是否匹配 true

4.22. "[]" --->为了解决"."匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:

4.2.3."|"--->如果除了上面匹配的所有单词(tan”、“Ten”、“tin”和“ton”)之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”,它的作用与算术表达式中的作用是一样的,表示一个整体。

4.2.4.“-”表示数字或字母的范围,

[0-9]表示0到9中的其中一个字符,[3-8]表示3到8中的一个字符

[a-z]表示a到z中的其中一个字符,[b-m]表示b到m中的一个字符

[A-Z]表示A到Z中的其中一个字符

[b-d3-8]表示b到z或3到8中其中一个字符

[a-dx-z]表示a到d或x到z中其中一个字符

示例:[a-c][0-9]{3}可以匹配a234,b112,c223等.

4.2.5."^" ---> 即非,用来确定紧靠该符号右边的符号不能出现

[^0-9]表示不可以为0到9中的一个字符

[^A]表示不可以为A的字符

[^a-c]表示不可以为a到c的字符

4.2.6.快捷符号


示例: "d{6}",匹配6个数字组成的字符。,注意前面要用两个表示转义

4.2.7. ""表示转义

如果正则表达式中要使用的字符与通配符冲突,则在前加上""表示不是通配符使用

比如"[0-9]{3}*{2}[0-9]{2}a*" 中*不是次数,而是字符*。它可以匹配0到9的三个数 字开头,后面是两个*,再后是0到9的2个数字最后是0到多个a字符。

这个"234**23aaaaa"可以匹配上面的正则表达式。

4.2.8."$"表示结束,每个正则表达式后面都可以加上$,实质上加与不加作用相同

4.2.9.特殊的匹配

[u4e00-u9fa5]匹配汉字

示例"[u4e00-u9fa5]{3}",可以匹配三个汉字组成的字符串

4.3、匹配次数的通匹符

这些符号用来确定紧靠该符号左边的符号出现的次数:

示例1:a*Hello可以匹配以Hello结尾,以0到多个a开头的字符串,如Hello,aHello,aaHello,aaaHello

示例2:MyA*Hello可以匹配以My开头,以Hello结尾,中间可以有0到多个A,如MyAAAHello

示例3:HelloE+World可以匹配以Hello开头,以World结尾,中间可以有1到多个E,如HelloEEWorld

示例4:HelloE?World可以匹配以Hello开头,以World结尾,中间必须有0到1个E

示例5:HelloE{3}World可以匹配以Hello开头,以World结尾,中间必须有3个E

示例6:HelloE{2,4}World可以匹配以Hello开头,以World结尾,中间必有2到4个E

示例7:Hello[^abc]可以匹配以Hello开头,不能以a或b或c结尾

文章源自华清远见嵌入式学院:http://www.embedu.org/

>>>更多优秀技术博文每日更新

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读