正则表达式

正则表达式(Regular Expression)是一种文本模式,包括普通字符和特殊字符(也称为元字符)。正则表达式使用单个字符串来描述、匹配某个句法规则的字符串

正则使用的场景

验证匹配、查找、替换 验证匹配:可以测试输入字符串是否与某种规则匹配,例如手机号匹配,银行卡号匹配 查找:基于模式匹配从字符串中提取子字符串,这样可以快速查找文档内特定文本内容 替换:可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者使用其他文本替换它

正则表达式基本语法规范

正则表达式的匹配规则是从左到右按规则匹配

示例:^[0-9]+abc$

  • ^为匹配输入字符串的开始位置

  • [0-9]+匹配多个数字,[0-9]匹配单个数字,+匹配一个或者多个

  • abc$匹配字母abc并以abc结尾,$为匹配输入字符串的结束位置

上述正则表达式所表达的含义:以0-9开头,并以abc结尾,其中0-9可以存在多个,但是必须在abc之前,且结尾必须是abc不能是aabc,abc前面必须是数字

正则表达式符号含义表

符号作用使用方法使用说明
[]匹配[]中的内容,有且仅有一位满足返回true[aeiou]匹配aeiou中的一个字符串
^在[]里面表示非
在[]外面表示匹配输入字符串的开始位置
[^aeiou]
^[aeiou]
匹配除了aeiou以外的字符
匹配开始位置为aeiou其中一个的字符串
-表示一个区间,一般与[]一起使用[A-Z]匹配字符串是否为大写字母
|ab
$匹配输入字符串的结束位置^[a-z]c$匹配以小写字母开头,c结尾的字符串
.匹配除换行符(\n、\r)之外的任何单个字符,相当于^[\n\r].+匹配不包含\n \r的字符串
\s匹配所有空白符,包括换行、空格、换页符、换行符等,等价于[\f\n\r\t\v]\s+匹配字符串中所有的空白符
\S匹配非空白符,等价于[^\f\n\r\t\v][\s\S]匹配所有
\w匹配字母、数字、下划线\w等价于[A-Za-z0-9_]
()标记一个子表达式的开始和结束位置为一个捕获组,捕获组可以获取供后续使用(\d{3})-(\d{3})-(\d{4})匹配123-456-7890类似这样的手机号,捕获组可以获取
\cx匹配一个控制符,x为一个A-Za-z的字母\cM匹配一个Control-M或回车符
\f匹配一个换页符,等价于\x0c或\cL
\n匹配一个换行符,等价于\x0a或\cJ
\r匹配一个回车符,等价于\x0d或\cM
\t匹配一个制表符,等价于\x09或\cI
\v匹配一个垂直制表符,等价于\x0b或\cK
\b匹配一个单词边界,即字与空格之间的位置
\B匹配非单词边界
*匹配前面的子表达式零次或多次zo*能匹配z、zo以及zoo,等价于{0,}
+匹配前面的子表达式一次或多次zo+能匹配zo以及zoo,等价于{1,}
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符do(es)?可以匹配do、does、doxy中的do和does,等价于{0,1}
{n}n必须为非负整数,匹配n次o{2}不能匹配Bob中的o,但是能 匹配food中的oo
{n,}n必须为非负整数,至少匹配n次o{2,}不能匹配Bob中的o,但是能匹配food中的oo,foooood中的ooooo
{n,m}m和n都必须为非负整数,最少匹配n次,最多匹配m次o{1,3}能匹配Bob中的o,也能匹配food中的oo,但是foooood只能匹配前三个o

常用的正则表达式查询表

要求表达式
整数或者小数^[0-9]+.{0,1}[0-9]{0,2}$
只能输入数字^[0-9]*$
只能输入n位的数字^\d{n,}$
只能输入m~n位的数字^\d{m,n}
只能输入零和非零开头的的数字^(0
只能输入有两位小数的正实数^[0-9]+(.[0-9]{2})?$
只能输入有1~3位小数的正实数^[0-9]+(.[0-9]{1,3})?$
只能输入非零的正整数^+?[1-9][0-9]*$
只能输入非零的负整数^-[1-9][0-9]*$
只能输入长度为3的字符^.{3}$
只能输入由26个英文字母组成的字符串^[A-Za-z]+$
只能输入由26个大写英文字母组成的字符串^[A-Z]+$
只能输入由26个小写英文字母组成的字符串^[a-z]+$
只能输入由数字和26个英文字母组成的字符串^[A-Za-z0-9]+$
只能输入由数字、下划线或26个英文字母组成的字符串^\w+$
验证用户密码,格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线^[a-z-A-Z]\w{5,17}$
验证是否含有^%&',;=?$"等字符[^%&',;=?$"\x22]
只能输入汉字^[\u4e00-\u9fa5]{0,}
验证Email地址^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
验证InternetURL^http://([w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
验证电话号码^((\d{3,4}-)
验证身份证号(15位或18位数字)^\d{15}
验证一年的12个月,正确格式为:“01"~"09"和"1"~"12”^(0?[1-9]
验证一个月的31天,正确格式为;“01"~"09"和"1"~"31”^((0?[1-9])
匹配中文字符的正则表达式[\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内)[^\x00-\xff]
匹配空行的正则表达式\n[\s
计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,“aa”).length;}
匹配html标签的正则表达式<(.)>(.)</(.*)>
匹配首尾空格的正则表达式(^\s*)
匹配2~16位数字、字母、特殊字符的正则表达式^[\x21-\x7e]{2,16}

JavaScript正则表达式

JavaScript起始位置为/结尾位置为/g

  1. javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

      String.prototype.trim = function()
      {
        return this.replace(/(^\s*)|(\s*$)/g, "");
      }
    
  2. 利用正则表达式分解和转换IP地址:下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

    function IP2V(ip)
    {
      re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
      if(re.test(ip)){
        return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
      }else{
        throw new Error("Not a valid IP address!")
      }
    }
    

    不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

    var ip="10.100.20.168"
    ip=ip.split(".")
    alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
    
  3. 利用正则表达式限制网页表单里的文本框输入内容:

    1. 用正则表达式限制只能输入中文:
      onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
      onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
      
    2. 用正则表达式限制只能输入全角字符:
      onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"
      onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
      
    3. 用正则表达式限制只能输入数字:
      onkeyup="value=value.replace(/[^\d]/g,'')"
      onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
      
  4. 用正则表达式限制只能输入数字和英文:

       onkeyup="value=value.replace(/[\W]/g,'')"
       onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
    
  5. 用正则表达式限制只能输入下划线,数字,字母和汉字

    <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5\w]/g,'')"
    onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5\w]/g,''))" value="允许下划线,数字字母和汉字">
    
  6. 限制文本框里只能输入数字

    <input onkeyup="if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\D/g,'');"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))"> 
    <PIXTEL_MMI_EBOOK_2005>2</PIXTEL_MMI_EBOOK_2005>
    
    <script language="javascript">
      if (document.layers)//触发键盘事件
        document.captureEvents(Event.KEYPRESS)
      function xz(thsv,nob){
        if(nob=="2"){
          window.clipboardData.setData("text","")
          alert("避免非法字符输入,请勿复制字符");
          return false;
        }
        if (event.keyCode!=8 && event.keyCode!=16 && event.keyCode!=37 && event.keyCode!=38 && event.keyCode!=39 && event.keyCode!=40){
          thsvv=thsv.value;//输入的值
          thsvs=thsvv.substring(thsvv.length-1);//输入的最后一个字符
          //thsvss=thsvv.substring(0,thsvv.length-1);//去掉最后一个错误字符
          if (!thsvs.replace(/[^\u4E00-\u9FA5\w]/g,'') || event.keyCode==189){//正则除去符号和下划线 key
            thsv.value='请勿输入非法符号 ['+thsvs+']';
            alert('请勿输入非法符号 ['+thsvs+']');
            thsv.value="";
            return false;
          }
        }
      }
    </script>
    <input onkeyup="xz(this,1)" onPaste="xz(this,2)" value="">允许数字字母和汉字
      <script language="javascript">
      <!--
      function MaxLength(field,maxlimit){
        var j = field.value.replace(/[^\x00-\xff]/g,"**").length;
        //alert(j);
        var tempString=field.value;
        var tt="";
        if(j > maxlimit){
          for(var i=0;i<maxlimit;i++){
            if(tt.replace(/[^\x00-\xff]/g,"**").length < maxlimit)
              tt = tempString.substr(0,i+1);
            else
              break;
            }
            if(tt.replace(/[^\x00-\xff]/g,"**").length > maxlimit)
              tt=tt.substr(0,tt.length-1);
              field.value = tt;
            }else{
                ;
            }
       }
    </script>
    单行文本框控制<br />
      <INPUT type="text" id="Text1" name="Text1" onpropertychange="MaxLength(this, 5)"><br />
      多行文本框控制:<br />
      <TEXTAREA rows="14"
      cols="39" id="Textarea1" name="Textarea1" onpropertychange="MaxLength(this, 15)"></TEXTAREA><br />
      控制表单内容只能输入数字,中文....
      <script>
      function test(){
        if(document.a.b.value.length>50){
          alert("不能超过50个字符!");
          document.a.b.focus();
          return false;
        }
      }
      </script>
    
      <form name=a onsubmit="return test()">
        <textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
        <input type="submit" name="Submit" value="check">
      </form>
      只能是汉字
      <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')">
      只能是英文字符
      <script language=javascript>
      function onlyEng(){
        if(!(event.keyCode>=65&&event.keyCode<=90))
          event.returnValue=false;
      }
      </script>
      <input onkeydown="onlyEng();">
      <input name="coname" type="text" size="50" maxlength="35" class="input2" onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
      只能是数字
    <script language=javascript>
      function onlyNum(){
        if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
        //考虑小键盘上的数字键
        event.returnValue=false;
      }
      </script>
      <input onkeydown="onlyNum();">
      只能是英文字符和数字
      <input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
      验证为email格式
      <SCRIPT LANGUAGE=Javascript RUNAT=Server>
      function isEmail(strEmail) {
        if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
        return true;
        else
        alert("oh");
      }
      </SCRIPT>
      <input type=text onblur=isEmail(this.value)>
      屏蔽关键字(sex , fuck) - 已修改
      <script language="JavaScript1.2">
      function test() {
        if((a.b.value.indexOf ("sex") == 0)||(a.b.value.indexOf ("fuck") == 0)){
          alert("五讲四美三热爱");
          a.b.focus();
          return false;}
        }
      </script>
      <form name=a onsubmit="return test()">
        <input type=text name=b>
        <input type="submit" name="Submit" value="check">
      </form>
    

JAVA正则表达式语法

正则表达式匹配

要求语法
匹配空行/^\s*$/
验证由两位数字、一个连字符再加 5 位数字组成的 ID 号/\d{2}-\d{5}/
匹配 HTML 标记/<\s*(\S+)(\s[^>])?>[\s\S]<\s*/\1\s*>/
匹配文件名是否含有/~# %等特殊字符^[^~#%&*\x5c/

Java的正则匹配与常规的正则匹配有一些小的区别

/表示起始位置,/表示结束位置

Pattern p_script = Pattern.compile("正则表达式", Pattern.CASE_INSENSITIVE);
Matcher m_script = p_script.matcher(content);
while (m_script.find()) {
  // 找到匹配内容,进行后续事情
  String strAid = m_script.group(1);
  // ...
}

Pattern类:正则表达式的编译表示,

Matcher类:

PatternSyntaxException:

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl·杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值