正则表达式

正则表达式:    java.util.Regex.Pattern类中

字符匹配:
abc            abc
[abc]         a、b、c之中任意一个
[a-zA-Z]     a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[^abc]         除了a、b、c之外的任意一个东西
^a            以a开头
^(abc)        以abc开头的东西中的abc
(abc)$        以abc结尾的东西中的abc


简短表达式:
\d             表示0到9的数字                相当于[0-9]
\D             非数字                         相当于[^0-9]
\s             空格(包括:\t\n\r\x0B\f)        
\S             非空格                        
\w             表示字母数字或下划线        相当于[a-zA-Z0-9_]
\W             非字母数字下划线            相当于[^a-zA-Z0-9_]
.            表示除\n之外的任意一个字符,如果要匹配.的话应写为\.


定位符:
\b            匹配在目标字符串的边界位置


出现次数:    贪婪匹配规则:当匹配字符串、数字等什么时,优先匹配最大长度的什么,万一不能匹配才匹配短长度的什么。
X?             X出现0次或1次
X*             出现0次或多次X,         
X+             出现一次或多次    
X{n}         出现了n次    
X{n,}         至少出现n次    
X{n,m}         至少n次至多m次        //优先匹配m,匹配不了时才匹配n

关系运算:
XY            X后面跟着Y
X|Y            X或Y
(X)            X或一个X表达式
X            X


正则表达式用法:
一、通过Pattern类
二、通过String类

一、
需要Pattern类制定正则表达式,
Matcher类来验证

Pattern类中的方法:
    public static Pattern compile(String regex){}    //通过此方法取得正则并
    public Matcher matcher(CharSequence input){}    //为谁匹配正则
    public String[] split(CharSequence input)        //字符串拆分
    public String pattern()                            //返回正则表达式
在此类中构造方法被隐藏起来,所以需要通过compile方法进行对象的实例化.
Pattern类用来进行正则对象的实例化和字符串的拆分工作

Matcher类中方法:
    public boolean matches()                        //根据正则去匹配
    public String replaceAll(String replacement)    //替换
    public String replaceFirst(String replacement)
    
字符串的验证:需要Pattern类指定验证的正则表达式,最终使用Matcher类进行匹配
字符串的替换:需要Pattern类指定验证的正则表达式,最终使用Matcher类进行匹配
    
二、jdk1.4之后加入了正则表达式并对String类进行了拓展,使得String类支持正则表达式
java.lang.String:
    public boolean matches(String regex)                        //通过正则规则验证
    public String replaceAll(String regex, String replacement)
    public String replaceFirst(String regex,String replacement)    
    public String[] split(String regex)
    
    
    

JS中的正则表达式:


创建正则表达式:

//隐式创建。
g代表全局,如果不加的话会循环去得到第一个匹配的内容,如果是alert的话会出现页面不断弹出第一个匹配的内容。
i表示忽略大小写。
m表示考虑换行模式,一般不用m也恩呢该考虑到换行
var regExp = /正则表达式/gim                   
//显示创建
var reg = new RegExp("正则表达式","gi");    //通过new RegExp()来显示创建。g代表全局,i表示忽略大小写。此时若正则表达式中有\需要再前面再加个\来转义


正则对象的方法:
regExp.exec(str):        检索字符串中指定的值,没有值返回null,若有值返回一个数组并将数组里的值放入数组下标为0的元素里,可用for或while循环取出。
regExp.test(str):          检索字符串中指定的值,返回true或false


String对象的方法:
stringObj.match(rgExp) :                    如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组
stringObj.search(rgExp):                    返回与正则表达式查找内容匹配的第一个子字符串的下标位置。如果没有找到匹配返回-1
stringObj.replace(rgExp, replaceStr):        rgExp是被替换的正则表达式,replaceStr是要替换的字符串,返回替换后的字符串
stringObj.split([separator[, limit]]):        将一个字符串分割为子字符串,然后将结果作为字符串数组返回。limit为返回数组的个数


内置对象RegExp的属性:
index        :    当前匹配内容中的开始下标
leftContext    :    当前匹配内容左边的内容
rightContext:    当前匹配的右边内容


引用表达式:
如例:var regExp = /(\d)(\d)\2\1/gim;     其中第一个(\d)表示第1个表达式    ,第二个(\d)表示第2个表达式,\2表示引用第2个表达式里面的内容,\1表引用第1个表达式里的内容


转义:
在匹配时与转义相关的字符有:. * + ( ) $ / \ ? [ ] ^ { } ,就是单独去查找这些字符时需要用\来转义的。


script type="text/javascript">
        
        //正则的exec方法,隐式创建正则表达式
        function testRegex1(){                            //检查输入框中是否有连续4个数字
            var tex = ta.innerText;
            var regExp = /\d{4}/gi;                        //第一种隐式创建正则表达式方法
            while(regres = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(regres[0]);                        //返回一个数组并将数组里的值循环放进regres[0]里面。不能将regres[0]写成regres因为这样有时不能正确显示。
            }
        }
    
        //正则的exec方法,显示地创建正则表达式
        function testRegex2(){                            //检查输入框中是否有连续4个数字
            var tex = ta.innerText;
            alert("1");
            var reg = new RegExp("\\d{4}","gi");        //第二种显示创建正则表达式方法
            alert("2");
            while(regres = reg.exec(tex)){                //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
            alert("3");
                alert(regres[0]);                        //返回一个数组并将数组里的值循环放进regres[0]里面
            }
        }
        
        //正则的exec方法,返回空或数组
        function testRegex3(){                            //检查输入框中是否有"啦啦啦"字符串
            var tex = ta.innerText;
            var regExp = /啦啦啦/gi;                        //查找字符串中的“啦啦啦”
            alert(tex);
            while(regres = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(regres[0]);                        //返回一个数组并将数组里的值循环放进regres[0]里面
            }
        }
        
        //正则的exec方法
        function testRegex4(){                            //显示输入框中所有以abc开头的字符串
            var tex = ta.innerText;
            var regExp = /^(abc)/gim;                    //以什么开头匹配的情况下匹配,若不加m则只在第一行找相应的匹配
            while(regres = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert("找到:"+regres[0]);                //返回一个数组并将数组里的值循环放进regres[0]里面
            }
        }
        
        //正则的test方法
        function testRegex5(){                            //检查输入文本是否有abc字符串
            var tex = ta.innerText;
            var regExp = /abc/gim;                    
            if(regExp.test(tex)){
                alert("有abc字符串");
            }else{
                alert("没有abc字符串");
            }
        }
        
        //String的search方法
        function SearchDemo(){                             //显示第一个匹配字符串的下标位置
               var r, re;                                   // 声明变量。
            var s = "The rain in Spain falls mainly in the plain.";
            re = /falls/i;                                 // 创建正则表达式模式。
            r = s.search(re);                            // 查找字符串。
               alert(r);                                     // 显示第一次匹配时的下标位置
        }
        
        //String的match方法
        function matchDemo(){                            //寻找输入文本中与abc匹配的字符串,返回数组
              var tex = ta.innerText;
            var reg = /abc/gim;
            regObj = tex.match(reg);
            for(var i=0;i<regObj.length;i++){
                alert("第"+(i+1)+"个"+regObj[i]);
            }    
        }
        
        //String的replace方法
        function ReplaceDemo(){                            //替换功能
            var r, re;                                    // 声明变量。
            var ss = "The man hit the ball with the bat.\n";
            ss += "while the fielder caught the ball with the glove.";
            re = /The/g;                                 // 创建正则表达式模式。
            r = ss.replace(re, "A");                    // 用 "A" 替换 "The"。
            alert(r);                                   // 返回替换后的字符串。
        }
        
        //String的split方法
        function SplitDemo(){                            //按空格分解字符串,返回数组
            var s, ss;
            var s = "The rain in Spain falls mainly in the plain.";
            // 在每个空格字符处进行分解。
            ss = s.split(" ");
            for(var i=0;i<ss.length;i++){
                alert("第"+(i+1)+"个元素:"+ss[i]);
            }
        }
        
        //内置对象RegExp的index、leftContext、rightContext属性
        function testRegExp(){                            //查看内置对象RegExp的属性
            var tex = ta.innerText;
            var regExp = /\d{4}/gim;                    
            while(regres = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert("index:"+RegExp.index + "\tleft:"+RegExp.leftContext +"\tright:"+RegExp.rightContext);    //内置对象RegExp的属性
            }
        }
        
        //引用表达式
        function refersTo1(){                            //给定一个字符串,要求找出其中四个连在一起的数字,并且第二与第三位相同,第一与第四位相同。
            var tex = ta.innerText;
            var regExp = /(\d)(\d)\2\1/gim;                //此时\d必须用小括号()括起来表示一个表达式
                                                        //第一个(\d)表示第1个表达式    ,第二个(\d)表示第2个表达式,
                                                        //\2表示引用第2个表达式里面的内容,\1表引用第1个表达式
            while(result = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(result[0]);
            }
        }
        
        //引用表达式
        function refersTo2(){                            //查询这样的号码:要求前面是任意5位数字,然后-符号,然后连续三位相同的9位数字,如:12345-111222333
            var tex = ta.innerText;
            var regExp = /(\d){5}-(\d)\2\2(\d)\3\3(\d)\4\4/gim;        //此时\d必须用小括号()括起来表示一个表达式
            while(result = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(result[0]);
            }
        }
        
        //{n}正则元素个数的匹配规则
        function testNum1(){                            //从一个匹配完的字符串后面再次寻找匹配,测试中可以输入"1111"查看
            var tex = ta.innerText;
            var regExp = /1{2}/gim;                        
            while(result = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(result[0]);
            }
        }
        
        //{n,m}正则元素个数的匹配规则
        function testNum2(){                            //先匹配最大长度,匹配不了时才匹配短的长度。所以它先匹配3个长度再匹配2个长度。
                                                        //测试中可以输入"11111"查看
            var tex = ta.innerText;
            var regExp = /1{2,3}/gim;                    
            while(result = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(result[0]);
            }
        }
        
        //x*的匹配:0到无穷次。
        function testNum3(){                            //先匹配最大长度,匹配不了时才匹配短的长度。所以它先匹配3个长度再匹配2个长度。
                                                        //测试中可以输入"a11"查看
            var tex = ta.innerText;
            var regExp = /a1*/gim;                        //*对应的是1,不是a1.
            while(result = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(result[0]);
            }
        }
        
        //[a-z]?的匹配:0到无穷次。                            //会得到5个结果,其中包括空的结果,因为?表示0到1,0的时候就有空的结果返回
        function testNum4(){                            //先匹配最大长度,匹配不了时才匹配短的长度。所以它先匹配3个长度再匹配2个长度。
                                                        //测试中可以输入"abcd"查看
            var tex = ta.innerText;
            var regExp = /[a-z]?/gim;                    
            while(result = regExp.exec(tex)){            //exec为正则表达式与什么匹配执行的方法,该方法返回数组,数组的第一个元素就是与正则匹配的内容
                alert(result[0]);
            }
        }
        
        //.    用来匹配除\n之外的任意一个字符                    //输入:abc.45,结果将abc.45六个字符循环输出
        function point1(){                                
            var tex = ta.innerText;
            var regExp = /./gim;                    
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        //    \.用来匹配.字符                                //输入:abc.45,结果将输出.
        function point2(){                                
            var tex = ta.innerText;
            var regExp = /\./gim;                    
            while(result = regExp.exec(tex)){            //js中如果result的结果不为空,while中的result可以被当成true来使用
                alert(result[0]);
            }
        }
        
        //[\d]\1{2}的用法                                    //输入abc123aaa111,输出111
        function ts1(){                                    //匹配任意三个相同的数字
            var tex = ta.innerText;
            var regExp = /([\d])\1{2}/gim;                //三个相同的数字
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        //^匹配在目标字符串的开始位置
        function ts2(){                                    //输入11 22得到11
            var tex = ta.innerText;
            var regExp = /^(\d){2}/gim;                    
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        //$匹配在目标字符串的结束位置
        function ts3(){                                    //输入11 22得到22
            var tex = ta.innerText;
            var regExp = /((\d){2})$/gim;                    
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        //$匹配在目标字符串的结束位置                        //匹配最后位置是abc的abc
        function ts4(){                                    //输入aaa中文得到中文
            var tex = ta.innerText;
            var regExp = /中文$/gim;                    
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        //\b匹配在目标字符串的边界位置                        //匹配最后位置是abc的abc
        function ts5(){                                    //输入"aaa1 2aaa"得到1
            var tex = ta.innerText;
            var regExp = /\b\d/gim;                        
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        //\b匹配在目标字符串的边界位置                        //匹配最后位置是abc的abc。边界指的是目标字符串之间的空格和结尾
        function ts6(){                                    //输入"aaa1 2aaa"得到2
            var tex = ta.innerText;
            var regExp = /\d\b/gim;                        
            while(result = regExp.exec(tex)){            
                alert(result[0]);
            }
        }
        
        
        //验证电子邮件格式是否正确                    //匹配最后位置是abc的abc。边界指的是目标字符串之间的空格和结尾
        function testEmail(){                                    //输入"aaa1 2aaa"得到2
            var tex = ta.innerText;
            var regExp = /^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/g                
            if(result = regExp.test(tex)){            
                alert("是一封格式正确的邮件");
            }else{
                alert("不是一封正确的邮件");
            }
        }
    </script>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值