黑马程序员技术交流社区

标题: 正则表达式学习 [打印本页]

作者: ice24    时间: 2015-6-21 06:58
标题: 正则表达式学习
正则表达式:其实就是用来简化字符串的操作。

            通过一些限定符号组成一种规则,来验证字符串是否符合规则

结论:正则表达式只能使用在字符串上

学习正则表达式,其实就是要学习正则规则中的各种限定符号

正则表达式中的各种符号:

一般符号:

x              表示任何字符   例:”NBA”   正则:“N[A-Z]”

\\             表示反斜线     例:“\\”     在正则中就是“\”

\t             制表符

字符符号: [ ]表示范围的意思

[abc]       表示要么是a要么是b还可以是c(只能是其中任意一个)

            例:”NBA”   正则:”N[ABC]A”    匹配正确:NBA  NAA  NCA

[^ab]       表示不能是a或b(除了a,b都可以)

[a-z]       表示26个小写字母

[A-Z]       表示26个大写字母

[a-zA-Z]    表示26个大小写字母

[a-d[x-z]]   表示可以是a~d之间或x-z之间的任意字符

[a-d&&[d-f]]表示只能是d。必须在两个范围中都要符合 。(交集)

[a-d&&[^d-f]] 表示只能是a,b,c。

[a-z&&[^xyz]]表示只能是除去x,y,z后的所有小写字母

[0-9]      表示0~9之间任意数字

预定义字符:

.       点在正则中可以表示任意的符号    例:以a开对后面可以是任意字符  “a.”

\d      表示数字。[0-9]   例:“A[\\d]C” 表示A和C之间可以任意的0~9之间的数字

\D      表示非数字。[^0-9]

\w      表示[0-9A-Za-z_]。可以是任意数字、任意大小写字母、下划线

\W     表示[^0-9A-Za-z_]

边界符:

^    表示行的开头  例:“^h.” 表示只能是以h作为开头

$    表示行的结尾  例:”^h.o$” 表示只能以h作为开头,以o作来结尾

数量词:       注意:数量词前面必须有存在正则符号

?     表示数量词?前面的正则符号可以有0次或1次   

*     表示数量词*前面的正则符号可以出现0次或多次

+     表示数量词+前面的正则符号可以出现1次或多次

{n}    表示数量词{n}前面的正则符号必须出现n次

{n,}    表示数量词{n,}前面的正则符号至少出现n次

{n,m}  表示数量词{n,m}前面的正则符号至少出现n次,但不能超过m次


正则的功能介绍

在正则表达式中,正则存在4种功能:匹配、切割、替换、获取

正则表达式就是用某种模式去匹配一类字符串的公式,主要用来描述字符串匹配的工具。
正则表达式描述了一种字符串匹配的模式。它可以用来检查字符串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
正则表达式是由普通字符(如字符a到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式就是用于描述某些规则的工具。这些规则经常用于处理字符串中的查找或替换字符串。换句话说,正则表达式就是记录文本规则的代码。

正则表达式的应用非常广泛,特别是在字符串处理方面。目前来说,正则表达式已经在很多软件中得到广泛了应用,如Linux、Unix、HP等操作系统,C#、PHP、Java等程序开发环境,以及很多的应用软件中,都可以看到正则表达式的这样或那样的应用。正则表达式常见的应用如下:
验证字符串,即验证给定的字符串或子字符串是否符合指定特征,譬如验证是否是合法的邮件地址、验证是否为合法的HTTP地址等。

查找字符串,从给定的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
替换字符串,即把给定的字符串中的符合指定特征的子字符串替换为其他字符串,比普通的替换更强大。
提取字符串,即从给定的字符串中提取符合指定特征的子字符串。


在java中使用String对象中的matches方法用来匹配正则规则。返回值为boolean

在一个正则表达中,后面的正则想要去使用前面已经存在的正则规则时,就必须把前面的正则规则包装起来,而后面的正则就可以去引用前面已经包装的正则规则了

正则怎么样进行封装(包装)呢?

在正则表达式中使用小括号”()”把前面已经存在的正则规则进行封装。

被”()”包含的内容,称为正则中的组。正则中的组都具有一个编号,称为组号

后面书写的正则怎么使用前面已经封装过的正则规则呢?

后面的正则中使用组的编号(组号)来引用前面已经存在的规则。使用\\组号引用

例:((a)((bc)d)) 组的是使用()包含起来,从前向后每一个()就表示一个组,都具有一个组号

第一组:((a)((bc)d))    组号:1

第二组:(a)            组号:2

第三组:((bc)d)        组号:3

第四组:(bc)          组号:4

    使用组号来引用封装的正则规则。使用\\组号 的方式引用前面存在的正则规则

正则的获取功能

正则表达式是在java中存在的一种规则,而java语言对于存在的事物,都会使用类来描述。在java.util.regex包中存在一个用来描述正则表达式的类

通过查阅API,可以获得:

1,  Pattern类是java中正则表达式的实例对象

2,  Pattern类是最终的类,不能被继承

3,  先要有Pattern类的实例(正则表达式的实例对象),通实例对象创建匹配器对象(Matcher类),最后是使用匹配器对象中的matches方法来对正则进行验证

4,  Pattern类没有构造函数。需要使用compile()方法获取Pattern类实例



作者: 遗失丨美好    时间: 2015-6-21 08:19
赞一个~~~~~~
作者: 冷雨敲窗被未温    时间: 2015-6-21 08:23
这个不错呢   
作者: 1958078929    时间: 2015-6-21 10:16
谢谢分享
作者: 呵呵呵呵,    时间: 2015-6-21 10:24
好详细,新人求支持,求鼓励
作者: 呵呵,    时间: 2015-6-21 10:43
很详细,很强大,新人求支持求鼓励
作者: j420984    时间: 2015-6-21 12:02
谢谢分享.
作者: tream    时间: 2015-6-21 12:07
赞一个,还没学到呢
作者: zc强盗    时间: 2015-6-21 16:02
可以的!
作者: zuopiezi    时间: 2015-6-21 16:45
学习一下、、、
作者: fanxin_meng    时间: 2015-6-21 16:54
赞一个  很有用
作者: ywh113112    时间: 2015-6-21 21:39
支持一下!!
作者: ice24    时间: 2015-6-22 21:19
呵呵, 发表于 2015-6-21 10:43
很详细,很强大,新人求支持求鼓励

加油,怀挺:)
作者: heisanheisan123    时间: 2015-6-22 21:46
学到了,加油。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2