正则语言(转的 大额_skylar )
Posted 暗影侠客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则语言(转的 大额_skylar )相关的知识,希望对你有一定的参考价值。
备注:正则表达式真的很头疼,收集起来,用起来很方便的。
常用的元字符
. | 匹配除换行符以外的任意字符 |
\\w | 匹配字母或数字或下划线或汉字 |
\\s | 匹配任意的空白符 |
\\d | 匹配数字 |
\\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用的限定符
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用的反译代码
\\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\\S | 匹配任意不是空白符的字符 |
\\D | 匹配任意非数字的字符 |
\\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
常用的分组语法
捕获 | (exp) | 匹配exp,并捕获文本到自动命名的组里 |
---|---|---|
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?\'name\'exp) | |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 | |
零宽断言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 | |
(?!exp) | 匹配后面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
注释 | (?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
惰性限定符
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
其他匹配
\\a | 报警字符(打印它的效果是电脑嘀一声) |
\\b | 通常是单词分界位置,但如果在字符类里使用代表退格 |
\\t | 制表符,Tab |
\\r | 回车 |
\\v | 竖向制表符 |
\\f | 换页符 |
\\n | 换行符 |
\\e | Escape |
\\0nn | ASCII代码中八进制代码为nn的字符 |
\\xnn | ASCII代码中十六进制代码为nn的字符 |
\\unnnn | Unicode代码中十六进制代码为nnnn的字符 |
\\cN | ASCII控制字符。比如\\cC代表Ctrl+C |
\\A | 字符串开头(类似^,但不受处理多行选项的影响) |
\\Z | 字符串结尾或行尾(不受处理多行选项的影响) |
\\z | 字符串结尾(类似$,但不受处理多行选项的影响) |
\\G | 当前搜索的开头 |
\\p{name} | Unicode中命名为name的字符类,例如\\p{IsGreek} |
(?>exp) | 贪婪子表达式 |
(?<x>-<y>exp) | 平衡组 |
(?im-nsx:exp) | 在子表达式exp中改变处理选项 |
(?im-nsx) | 为表达式后面的部分改变处理选项 |
(?(exp)yes|no) | 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no |
(?(exp)yes) | 同上,只是使用空表达式作为no |
(?(name)yes|no) | 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no |
(?(name)yes) | 同上,只是使用空表达式作为no |
1、匹配中文字符的正则表达式: [\\u4e00-\\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
2、匹配双字节字符(包括汉字在内):[^\\x00-\\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
3、匹配空白行的正则表达式:\\n\\s*\\r
评注:可以用来删除空白行
4、匹配html标记的正则表达式:<(\\S*?)[^>]*>.*?</\\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
5、匹配首尾空白字符的正则表达式:^\\s*|\\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
6、匹配Email地址的正则表达式:\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*
评注:表单验证时很实用
7、匹配网址URL的正则表达式:[a-zA-z]+://[^\\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
8、匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
9、匹配国内电话号码:\\d{3}-\\d{8}|\\d{4}-\\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
10、匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
11、匹配中国邮政编码:[1-9]\\d{5}(?!\\d)
评注:中国邮政编码为6位数字
12、匹配身份证:\\d{15}|\\d{18}
评注:中国的身份证为15位或18位
13、匹配ip地址:\\d+\\.\\d+\\.\\d+\\.\\d+
评注:提取ip地址时有用
14、匹配特定数字:
^[1-9]\\d*$ //匹配正整数
^-[1-9]\\d*$ //匹配负整数
^-?[1-9]\\d*$ //匹配整数
^[1-9]\\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$ //匹配正浮点数
^-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*)$ //匹配负浮点数
^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$ //匹配浮点数
^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*))|0?\\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
15、匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
16、过滤 EMOJI表情:
return this.replace(/([\\uE000-\\uF8FF]|\\uD83C[\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDDFF])/g, \'\')
17、匹配页面所有的{{name}}这样的:
1 var rformat = /\\\\?{{([^{}]+)\\}}/gm; 2 function getMessage() { 3 var data = this.data || {} 4 return this.message.replace(rformat, function(_, name) { 5 return data[name] || "" 6 }) 7 }
非常好的学习资源:http://www.jb51.net/tools/zhengze.html#metacode
以上是关于正则语言(转的 大额_skylar )的主要内容,如果未能解决你的问题,请参考以下文章