编程基础——正则表达式
来源:互联网 发布:多益网络加班情况 编辑:程序博客网 时间:2024/05/03 15:49
一、正则表达式
1、正则表达式(Regular Expression)是通过一些特殊字符的排列,用以查找、替换、删除一行或多行字符串的一种表达式。
2、正则表达式并不是一个工具或程序,而是一种字符串处理的依据。
3、正则表达式的字符串根据表示方式的严谨度可以分为基础正则表达式与扩展正则表达式。
4、使用正则表达式时还需注意语言环境的设置,因为不同的语言环境对字符排序不一样。
二、基本语法
常用的语法:
三、详细语法
1、元字符
元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
2、重复
3、反义
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:
4、后向引用
后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示例:
\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?\w+)(或者把尖括号换成’也行:(?’Word’\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k,所以上一个例子也可以写成这样:\b(?\w+)\b\s+\k\b。
使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:
5、贪婪与惰性
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
四、常用的正则表达式
1、正则表达式 速查表
2、常用的正则表达式
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
1、用户名:/^[a-z0-9_-]{3,16}$/
2、密码:/^[a-z0-9_-]{6,18}$/
3、十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
4、电子邮箱:/^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/
5、URL:/^(https?:\/\/)?([\da-z.-]+).([a-z.]{2,6})([\/\w .-])\/?$/
6、IP 地址:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
7、HTML 标签:/^<([a-z]+)([^<]+)(?:>(.)<\/\1>|\s+\/>)$/
8、Unicode编码中的汉字范围:/^[u4e00-u9fa5],{0,}$/
9、匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
10、匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
11、匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
12、匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
13、匹配Email地址的正则表达式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
评注:表单验证时很实用
14、匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
15、匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
16、匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
17、匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
18、匹配中国大陆邮政编码:[1-9]\d{5}(?!\d)
评注:中国大陆邮政编码为6位数字
19、匹配身份证:\d{15}|\d{18}
评注:中国大陆的身份证为15位或18位
20、匹配ip地址:\d+.\d+.\d+.\d+
评注:提取ip地址时有用
21、匹配特定数字:
^[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)
评注:处理大量数据时有用,具体应用时注意修正
22、匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
3、表达式全集
注:本文内容大多引用:http://www.jb51.net/tools/zhengze.html#mission
- 编程基础——正则表达式
- python编程基础—正则表达式
- Shell编程——正则表达式基础与扩展
- Java基础—正则表达式
- c#基础语言编程-正则表达式基础
- 正则表达式基础——笔记
- java基础——正则表达式
- Java基础——正则表达式
- JavaSe基础XX22——正则表达式
- JS基础系列——正则表达式
- Java基础——正则表达式
- JAVA基础——正则表达式、枚举
- Java基础——正则表达式
- java基础——正则表达式
- JAVA基础——正则表达式
- 【Java基础】——正则表达式
- Java基础——正则表达式
- Java基础——正则表达式语法
- Web前端初步——HTML5
- Linux软件管理
- 约瑟夫问题
- month——input新属性,显示年月
- windows命令 重命名
- 编程基础——正则表达式
- 奇葩问题,签名打包后的程序按HOME键异常退出
- 【Halcon】 模板匹配 create_template 与 fast_match_mg
- Linux常用命令:vmstat命令
- 夜间模式问题
- JSON格式的天气信息解析并储到本地SharedPreferences
- Linux升级内核
- 获取时间
- 《定风波》--苏轼之我最喜欢的一首词