在编程中,有时你会发现正则表达式是一个很有用的工具,这篇文章让我和大家一起来理解和使用正则表达式。

        首先我们来看看正则表达式的基础知识,包括点符号(.),方括号([]),或(|),匹配次数符(*,+,?,{n},{m,n}),非(^),空白符(\s)和其它常用字符等。

        点符号,.号可以匹配所有字符,包括空格号,例如d.y,就可以匹配day,d@y,d!y,d y等等。

        方括号,[]中可以加入要匹配的字符,例如a[abcdef]c,这个例子只能匹配aac,abc,acc,adc,aec,afc。就相当于从中括号中选择一个字符进行匹配,不能匹配aaac,aabcc等。

        或号,|表示两者之一,例如a(a|b|aa|bb)c,这个可以匹配的结果是aac,aaac,abbc。与括号不同的或号可以是多个字符,方括号中只能包含一个字符。

        匹配次数符,*表示0次或多次,+表示1次或多次,?表示0次或1次,{n}表示n次,{m, n}表示m到n次。例a*,a+,a?,a{3},a{2,5}。

        空白符,\s表示一个空格字符,但在匹配时要这样"\\s",转义,不然eclipse会报错。

        非,^表示否的意思,例如^a,表示这个字符不能为a。

[^A-Z0-9],\s表示[\t\n\r\f],\S表示[^\t\n\r\f]。这里要说明的点是"^\\d"与"\\d"匹配的结果是一样的,说明^字符在这里没有起到作用。

        

        在java中使用正则表达式的几种方法:

boolean b = "abcd".mathes("[a-z]+");
              
                boolean b = Pattern.matches("[a-z]+", "abcd");
                
                Pattern p = Pattern.conpile("[a-z]+");
                Matcher m = p.matches("abcd");
                boolean b = m.matches();

        以上三种方法可以给我们使用,可以根据具体情况选择适合的方式使用。


        下面我们我看看具体的一些实例:

         匹配IP地址,\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

         查找html中对应条件的字符串,

Pattern pattern = Pattern.compile("href=\"(.+?)\"");
                           Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
                                              if(matcher.find())

                  打印结果为:index.html

        去除html标记,

Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
                 Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
                 String string = matcher.replaceAll("");

                  打印结果为:主页

         匹配是否为邮箱地址,

String str="123456789@qq.com";
                     Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+", Pattern.CASE_INSENSITIVE);
                     Matcher matcher = pattern.matcher(str);

                  打印结果为:true

         把我们要匹配的字符替换成我们想要的字符,

                           

Pattern pattern = Pattern.compile("我是正则表达式");
                                     Matcher matcher = pattern.matcher("我是正则表达式 Hello World!我是正则表达式 ");

我被替换了

Matcher matcher = pattern.matcher("我是正则表达式 Hello World,我是正则表达式"); 
                                   System.out.println(matcher.replaceFirst("我被替换了"));

                  打印结果为:我被替换了 Hello World,我是正则表达式

         等等这些只是一些简单的用法,还有很多用法以后补充吧。



身份证正则:

//身份证正则表达式(15位)
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
//身份证正则表达式(18位)
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
身份证正则合并:(^\d{15}$)|(^\d{17}([0-9]|X)$)

最新手机号码正则表达式:

var tel = $("#telNo").val(); //获取手机号
var telReg = !!tel.match(/^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/);
//如果手机号码不能通过验证
if(telReg == false){
 
}

其他

提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
提取信息中的中国身份证号码:\d{18}|\d{15}
提取信息中的整数:\d+
提取信息中的浮点数(即小数):(-?\d*)\.?\d+
提取信息中的任何数字 :(-?\d*)(\.\d+)?
提取信息中的中文字符串:[\u4e00-\u9fa5]*
提取信息中的双字节字符串 (汉字):[^\x00-\xff]*

使用:

test()方法在字符串中查找是否存在指定的正则表达式,并返回布尔值,如果存在则返回true,否则返回false。

var pattern = new RegExp('Box','i');
var str = 'box';
alert(pattern.test(str)); //true
var pattern = /Box/i;
var str = 'box';
alert(pattern.test(str)); //true
var pattern = /Box/i;
var str = 'This is a box';
alert(pattern.test(str)); //true




^([1-9]{0,1}[0-9]{0,4})$ 这个正则表达式表示什么意思?

^:匹配字符串开始

([1-9]{0,1}[0-9]{0,4})

是一个组,组内有两个部分:

[1-9]{0,1}

[0-9]{0,4}

[1-9]{0,1}:

[1-9]表示1到9的数字,{0,1}表示0或或1个,即有或没有的意思,等价于正则中的?

[0-9]{0,4}:

[0-9]表示0-到9的数字,{0,4}表示0到4个

$:匹配字符串结尾