正则表达式匹配最后一部分

今天,同事问了我一个正则,最后解决了,给大家提供一下参考。用于取网址的最后一部分。本文用于讲解(?= 和 ?<= 和 ?>=和 ?! 的用法) 数据如下: https://download.microsoft.com/download/5/3/8/5388ECC4-C2E2-4D40-8C21-D1EA26FEA0CA/msodll40ui2016-kb4018324-fullfile-x86-glb.exe https://download.microsoft.com/download/B/2/5/B25D200D-804D-44B9-A345-9D1A21386470/osetup2010-kb4022208-fullfile-x86-glb.exe https://download.microsoft.com/download/6/7/0/6703678B-8270-41ED-B16B-5F7D08D05A84/osetup2010-kb4022208-fullfile-x64-glb.exe https://download.microsoft.com/download/6/B/1/6B1BD3F3-A8CC-44BA-86EF-E85A0E066E33/ose2010-kb4022206-fullfile-x86-glb.exe https://download.microsoft.com/download/9/0/1/901D9393-AB8E-4018-BF2D-78341A0B60BE/ose2010-kb4022206-fullfile-x64-glb.exe 通过如下正则可以匹配 / 之后的部分:[^/]+(?!.*exe) 匹配到的数据如下: msodll40ui2016-kb4018324-fullfile-x86-glb.exe osetup2010-kb4022208-fullfile-x86-glb.exe osetup2010-kb4022208-fullfile-x64-glb.exe ose2010-kb4022206-fullfile-x86-glb.exe ose2010-kb4022206-fullfile-x64-glb.exe 说明: [^/]+ 表示匹配任意长度的字符串,字符串中不包含有字符 / ,就可以把以 / 分割开的字符串全匹配到. .*exe 表示任意以exe 结尾的字符串,可以把后在带有exe的字符串匹配到,前面再加上?!,再用圆括号包住表示排除掉(?!.*exe) 整个表达式的意思就是匹配任意长度的不包含/ 的字符串,并把以exe结尾的字符串匹配出来。 举个例子进行讲解: 有个字符串如下 str = "程序人生 程序 人生 序人" 我们想匹配字符串里"程序人生"的"人"字而不要其他的"人"字,这时就需要用到前瞻后顾。 正则表达式如下: (?<=程序)人(?=生) 反过来,我们不想要"程序人生"的"人"字,但是想要其他"人"字。这时就要用到负前瞻,负后顾 正则表达式如下: (?<!程序)人(?!生) 总结一下: 前瞻: exp1(?=exp2)     查找exp2前面的exp1 后顾:  (?<=exp2)exp1   查找exp2后面的exp1 负前瞻:  exp1(?=exp2)     查找后面不是exp2的exp1 负后顾:  (?<=exp2)exp1   查找前面不是exp2的exp1 可以发现,负前瞻、负后顾就是把前瞻、后顾中的"="改成了"!" 注意:后顾功能在大多数语言中有长度限制,只能使用定长的表达式,像\w+和\d 这样的表达式长度可变,不能用在后顾中 备注:最近太忙,看半天也没有真正理解,先记录一下,回头有空再看。 ———————————————— 版权声明:本文为CSDN博主「白夜鬼魅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/shuryuu/article/details/82910857

几种基本的数字正则表达式[转]

只能输入1个数字 表达式  ^\d$ 描述  匹配一个数字 匹配的例子  0,1,2,3 不匹配的例子 只能输入n个数字 表达式  ^\d{n}$ 例如^\d{8}$ 描述  匹配8个数字 匹配的例子  12345678,22223334,12344321 不匹配的例子 只能输入至少n个数字 表达式  ^\d{n,}$ 例如^\d{8,}$ 描述  匹配最少n个数字 匹配的例子  12345678,123456789,12344321 不匹配的例子 只能输入m到n个数字 表达式  ^\d{m,n}$ 例如^\d{7,8}$ 描述  匹配m到n个数字 匹配的例子  12345678,1234567 不匹配的例子  123456,123456789 只能输入数字 表达式  ^[0-9]*$ 描述  匹配任意个数字 匹配的例子  12345678,1234567 不匹配的例子  E, 只能输入某个区间数字 表达式  ^[12-15]$ 描述  匹配某个区间的数字 匹配的例子  12,13,14,15 不匹配的例子 只能输入0和非0打头的数字 表达式  ^(0|[1-9][0-9]*)$ 描述  可以为0,第一个数字不能为0,数字中可以有0 匹配的例子  12,10,101,100 不匹配的例子  01, 只能输入实数 表达式  ^[-+]?\d+(\.\d+)?$ 描述  匹配实数 匹配的例子  18,+3.14,-9.90 不匹配的例子  .6,33s,67-99 只能输入n位小数的正实数 表达式  ^[0-9]+(.[0-9]{n})?$以^[0-9]+(.[0-9]{2})?$为例 描述  匹配n位小数的正实数 匹配的例子  2.22 不匹配的例子  2.222,-2.22, 只能输入m-n位小数的正实数 表达式  ^[0-9]+(.[0-9]{m,n})?$以^[0-9]+(.[0-9]{1,2})?$为例 描述  匹配m到n位小数的正实数 匹配的例子  2.22,2.2 不匹配的例子  2.222,-2.2222, 只能输入非0的正整数 表达式  ^\+?[1-9][0-9]*$ 描述  匹配非0的正整数 匹配的例子  2,23,234 不匹配的例子  0,-4, 只能输入非0的负整数 表达式  ^\-[1-9][0-9]*$ 描述  匹配非0的负整数 匹配的例子  -2,-23,-234 不匹配的例子  0,4, 只能输入n个字符 表达式  ^.{n}$ 以^.{4}$为例 描述  匹配n个字符,注意汉字只算1个字符 匹配的例子  1234,12we,123清,清清月儿 不匹配的例子  0,123,123www, 只能输入英文字符 表达式  ^.[A-Za-z]+$为例 描述  匹配英文字符,大小写任意 匹配的例子  Asp,WWW, 不匹配的例子  0,123,123www, 只能输入大写英文字符 表达式  ^.[A-Z]+$为例 描述  匹配英文大写字符 匹配的例子  NET,WWW, 不匹配的例子  0,123,123www, 只能输入小写英文字符 表达式  ^.[a-z]+$为例 描述  匹配英文大写字符 匹配的例子  asp,csdn 不匹配的例子  0,NET,WWW, 只能输入英文字符+数字 表达式  ^.[A-Za-z0-9]+$为例 描述  匹配英文字符+数字 匹配的例子  1Asp,W1W1W, 不匹配的例子  0,123,123,www, 只能输入英文字符/数字/下划线 表达式  ^\w+$为例 描述  匹配英文字符或数字或下划线 匹配的例子  1Asp,WWW,12,1_w 不匹配的例子  3#,2-4,w#$, 密码举例 表达式  ^.[a-zA-Z] \w{m,n}$ 描述  匹配英文字符开头的m-n位字符且只能数字字母或下划线 匹配的例子 不匹配的例子 验证首字母大写 表达式  \b[^\Wa-z0-9_][^\WA-Z0-9_]*\b 描述  首字母只能大写 匹配的例子  Asp,Net 不匹配的例子 验证网址(带?id=中文)VS.NET2005无此功能 表达式  ^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w- .\/\?%&=\u4e00-\u9fa5]*)?)?$ 描述  验证带?id=中文 匹配的例子  , http://blog.csdn.net/?id=清清月儿 不匹配的例子 验证汉字 表达式  ^[\u4e00-\u9fa5]{0,}$ 描述  只能汉字 匹配的例子  清清月儿 不匹配的例子 验证QQ号 表达式  [0-9]{5,9} 描述  5-9位的QQ号 匹配的例子  10000,123456 不匹配的例子  10000w, 验证电子邮件(验证MSN号一样) 表达式  \w+([-+.´]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 描述  注意MSN用非hotmail.com邮箱也可以 匹配的例子  aaa@msn.com 不匹配的例子  111@1. 验证身份证号(粗验,最好服务器端调类库再细验证) 表达式  ^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$ 描述 匹配的例子  15或者18位的身份证号,支持带X的 不匹配的例子 验证手机号(包含159,不包含小灵通) 表达式  ^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8} 描述  包含159的手机号130-139 匹配的例子  139XXXXXXXX 不匹配的例子  140XXXXXXXX, 验证电话号码号(很复杂,VS.NET2005给的是错的) 表达式(不完美 )  方案一 ((\(\d{3}\)|\d{3}-)|(\(\d{4}\)|\d{4}-))?(\d{8}|\d{7}) 方案二 (^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$) 支持手机号但也不完美 描述  上海:02112345678 3+8位 上海:021-12345678 上海:(021)-12345678 上海:(021)12345678 郑州:03711234567 4+7位 杭州:057112345678 4+8位 还有带上分机号,国家码的情况 由于情况非常复杂所以不建议前台做100%验证,到目前为止似乎也没有谁能写一个包含所有的类型 ,其实有很多情况本身就是矛盾的。 如果谁有更好 的验证电话的请留言 匹配的例子 不匹配的例子 验证护照 表达式  (P\d{7})|G\d{8}) 描述  验证P+7个数字和G+8个数字 匹配的例子 不匹配的例子 验证IP 表达式  ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ 描述  验证IP 匹配的例子  192.168.0.1 222.234.1.4 不匹配的例子 验证域 表达式  ^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.(com|org|net|cn|com.cn|edu.cn|grv.cn|)$ 描述  验证域 匹配的例子  csdn.net baidu.com it.com.cn 不匹配的例子  192.168.0.1 验证信用卡 表达式  ^((?:4\d{3})|(?:5[1-5]\d{2})|(?:6011)|(?:3[68]\d{2})|(?:30[012345]\d))[ -]?(\d{4})[ -]?(\d{4})[ -]?(\d{4}|3[4,7]\d{13})$ 描述  验证VISA卡,万事达卡,Discover卡,美国运通卡 匹配的例子 不匹配的例子 验证ISBN 国际标准书号 表达式  ^(\d[- ]*){9}[\dxX]$ 描述  验证ISBN国际标准书号 匹配的例子  7-111-19947-2 不匹配的例子 验证GUID 全球唯一标识符 表达式  ^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}$ 描述  格式8-4-4-4-12 匹配的例子  2064d355-c0b9-41d8-9ef7-9d8b26524751 不匹配的例子 验证文件路径和扩展名 表达式  ^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$ 描述  检查路径和文件扩展名 匹配的例子  E:\mo.txt 不匹配的例子  E:\ , mo.doc, E:\mo.doc , 验证Html颜色值 表达式  ^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$ 描述  检查颜色取值 匹配的例子  #FF0000 不匹配的例子   本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yoland/archive/2009/10/27/4731863.aspx   from:http://www.cnblogs.com/cean/archive/2009/12/13/1622954.html

验证数字的正则表达式

验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 验证非零的正整数:^\+?[1-9][0-9]*$ 验证非零的负整数:^\-[1-9][0-9]*$ 验证非负整数(正整数 + 0) ^\d+$ 验证非正整数(负整数 + 0) ^((-\d+)|(0+))$ 验证长度为3的字符:^.{3}$ 验证由26个英文字母组成的字符串:^[A-Za-z]+$ 验证由26个大写英文字母组成的字符串:^[A-Z]+$ 验证由26个小写英文字母组成的字符串:^[a-z]+$ 验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$ 验证由数字、26个英文字母或者下划线组成的字符串:^\w+$ 验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。 验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+ 验证汉字:^[\u4e00-\u9fa5],{0,}$ 验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ 验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。 验证身份证号(15位或18位数字):^\d{15}|\d{}18$ 验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12” 验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。 整数:^-?\d+$ 非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$ 正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 浮点数 ^(-?\d+)(\.\d+)?$ ×××××××××××××××××××××××××××××××××××××× 以下未经测试,请验证后使用 1.只能输入数字和英文的: <input onkeyup="value=value.replace(/[\W]/g,") " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,"))" ID="Text1" NAME="Text1"> 2.只能输入数字的: <input onkeyup="value=value.replace(/[^\d]/g,") " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,"))" ID="Text2" NAME="Text2"> 3.只能输入全角的: <input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,")" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,"))" ID="Text3" NAME="Text3"> 4.只能输入汉字的: <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,")" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,"))" ID="Text4" NAME="Text4"> 5.邮件地址验证: var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$" var re = new RegExp(regu); if (s.search(re) != -1) { return true; } else { window.alert ("请输入有效合法的E-mail地址 !") return false; } 6.身份证: "^\\d{17}(\\d|x)$" 7.17种正则表达式 "^\\d+$"  //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$"  //正整数 "^((-\\d+)|(0+))$"  //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$"  //负整数 "^-?\\d+$"    //整数 "^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0) "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数 "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0) "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数 "^(-?\\d+)(\\.\\d+)?$"  //浮点数 "^[A-Za-z]+$"  //由26个英文字母组成的字符串 "^[A-Z]+$"  //由26个英文字母的大写组成的字符串 "^[a-z]+$"  //由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 "^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串 "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址 "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url ============================================= 1.取消按钮按下时的虚线框 在input里添加属性值 hideFocus 或者 HideFocus=true 2.只读文本框内容 在input里添加属性值 readonly 3.防止退后清空的TEXT文档(可把style内容做做为类引用) <INPUT style=behavior:url(#default#savehistory); type=text id=oPersistInput> 4.ENTER键可以让光标移到下一个输入框 <input onkeydown="if(event.keyCode==13)event.keyCode=9" > 5.只能为中文(有闪动) <input onkeyup="value="/value.replace(/[" -~]/g,’’)" onkeydown="if(event.keyCode==13)event.keyCode=9"> 6.只能为数字(有闪动) <input onkeyup="value="/value.replace(/["^\d]/g,’’) "onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))"> 7.只能为数字(无闪动) <input ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"> 8.只能输入英文和数字(有闪动) <input onkeyup="value="/value.replace(/[\W]/g,"’’)" onbeforepaste="clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^\d]/g,’’))"> 9.屏蔽输入法 <input type="text" name="url" ime-mode:disabled" onkeydown="if(event.keyCode==13)event.keyCode=9"> 10. 只能输入 数字,小数点,减号(-) 字符(无闪动) <input onKeyPress="if (event.keyCode!=46 && event.keyCode!=45 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false"> 11. 只能输入两位小数,三位小数(有闪动) <input maxlength=9 onkeyup="if(value.match(/^\d{3}$/))value="/value.replace(value,parseInt(value/10))" ;value="/value.replace(/\.\d*\./g,’."’)" onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 && event.keyCode!=45 || value.match(/^\d{3}$/) || /\.\d{3}$/.test(value)) {event.returnValue=false}" id=text_kfxe name=text_kfxe>   from:http://jingyan.baidu.com/article/624e74599410d634e8ba5a0a.html