正则表达式学习笔记

来源:互联网 发布:阿里云服务器学生续费 编辑:程序博客网 时间:2024/05/22 15:22

正则表达式看起来很简单,实际上很复杂,就像古文,就那么几个字,可是解析起来却很复杂的。但是也不用害怕,只要从简单处入手,还是可以掌握一些基本的原理的。

正则表达式的运作原理是:

1. 它是处理字符串的,所以不要给二进制的内容,视频流,网络流这些它都不能处理。

2. 首先要有一个待处理的字符串,通常的例子是一个电话号码,或者一个网址,一个邮件地址,需要去验证这个字符串是否合法。

3. 然后要有一个正则表达式,正则表达式也是一个字符串。

4. 然后用String类本身的matches方法去判断输入的字符串是否符合规则,如果符合就返回true,否则返回false。


下面举一个最简单的例子:

public class regularExpression {public static void main(String[] args) {boolean res = true;res = checkMailAddress("1234");System.out.println(res);}private static boolean checkMailAddress(String s){String reg = "[1][2][3][4]";return s.matches(reg);}}

这里的reg的意思是,字符串的第一个字符是1,第二个是2,第3个是3, 第4个是4.按照这个规则,只有"1234“字符串才能符合这个要求。当然实际情况是不会这样写的,这样写相当于验证密码了。

更多的情况是判断是否某一类字符串,比如说判断是否电子邮件地址的规则:

1. 有2个字符串分别在@符号的2边

2. 右边的字符串应该包含一个"."

3. 字符串只能包含数字,字母,"-",".","_", 不包含空格

那么要如何去写这个规则?

reg = "\\w+@\\w+(\\.\\w+)+";

相关的规则可以查看java开发手册的Sting类,里面的matches方法里面的正则表达式链接里面就有。

其中\w的意思是所有单词,相当于[a-zA-Z_0-9], 这个意思是说中括号里面的字符都包含,也就是所有小写字母、所有大写字母,下划线以及所有数字。(事实上应该还要包括减号和点号,待补充)

后面跟的加号表示要出现一次或多次。

为什么需要用2个反斜杠,因为在字符串本身的规则里面反斜杠表示转义字符,而我们这里希望表示反斜杠本身,所以就用了2个。

同样的,在@右边的部分也很容易理解,就是可以包括1个或以上的单词字符或者下划线。

那么(\\.\\w+)+又是什么意思?

这里面的点号也是用了双斜杠来转义,如果不转义的话,点号在正则里面是代表所有字符。

因为有些邮箱是带国家域名的:johnny@google.com.cn

用括号包起来,后面跟个加号,表示出现一次或者一次以上。


另外一种正则表达式的用途是网页爬虫,常见的有从一个网页上查找电子邮件地址,或者从网络上查找图片地址,或者各种想要的资源。

因为网页的格式是html,而html本身就是很多字符串的集合。

有了正则表达式这种技术,网页爬虫就能自动化生成邮件列表,我们经常遇到的电子邮件垃圾就是这样来的,就是有一些人利用爬虫在网上随便搜地址,然后就用群发的方式来发送邮件。但是这种方式毕竟已经很落后了。其实是可以做得更智能化和精准化的。事实上google和百度的搜索引擎也是用这种原理,就是预先把各种可能的关键字存起来,做成索引,然后在用户做搜索的时候进行相关度匹配,然后呈现出结果给用户。








0 0