正则表达式( Regular Expression),计算机科学的一个概念,代码中常简写为 regex 或 RE,通常被用来检索、替换那些符合某个规则的文本。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器NotePad++,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。
正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式”testing”中没有包含任何元字符,它可以匹配”testing”和”testing123”等字符串,但是不能匹配”Testing”。
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了常用正则表达式元字符和对它们的一个简短的描述及简单的实例: 注意:
- […] 字符组,匹配单个列出的字符
- [^…] 排除型字符组,匹配单个未列出的字符
- 转义字符的 3 种情况:
- \ 加元字符,表示匹配元字符所使用的普通字符。
- \ 加非元字符,组成一种由具体实现方式规定其意义的元字符序列 如 < 表示单词的起始边界。
- \ 加任意其他字符,默认情况就是匹配此字符,也就是说,反斜线被忽略了。
整理的常用正则表达式
匹配中文字符
1 | [\u4e00-\u9fa5] |
匹配双字节字符
1 | [^\x00-\xff] //可以用来计算字符串的长度(一个双字节字符长度计 2,ASCII 字符计 1),包括汉字在内 |
匹配空白行
1 | \n\s*\r //可以用来删除空白行 |
匹配首尾空白字符
1 | ^\s*|\s*$ //可以用来删除行首行尾的空白字符 (包括空格、制表符、换页符等等),非常有用的表达式 |
匹配 HTML 标记
1 | <(\S*?)[^>]*>.*?</\1>|<.*? /> //这个也仅能匹配部分,对于复杂的嵌套标记依旧无能为力 |
匹配 网址 URL
1 | [a-zA-z]+://[^\s]* //这个基本可以满足需求 |
匹配 QQ 号
1 | [1-9][0-9]{4,} //腾讯 QQ 号从 10000 开始 |
匹配 Email 地址
1 | \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* //表单验证时很实用 |
匹配帐号是否合法
1 | ^[a-zA-Z][a-zA-Z0-9_]{4,15}$ //字母开头,允许 5-16 字节,允许字母数字下划线 |
匹配国内电话号码
1 | \d {3}-\d {8}|\d {4}-\d {7} //匹配形式如 0511-4405222 或 021-87888822 |
匹配中国邮政编码
1 | [1-9]\d {5}(?!\d) //中国邮政编码为 6 位数字 |
匹配身份证
1 | \d {15}|\d {18} //中国的身份证为 15 位或 18 位 |
匹配 ip 地址
1 | \d+\.\d+\.\d+\.\d+ //提取 ip 地址时有用 |
匹配特定数字
应用场景 | 正则表达式 |
---|---|
匹配正整数 | ^[1-9]\d*$ |
匹配负整数 | ^-[1-9]\d*$ |
匹配整数 | ^-?[1-9]\d*$ |
匹配非负整数(正整数 + 0) | ^[1-9]\d*|0$ |
匹配非正整数(负整数 + 0) | ^-[1-9]\d*|0$ |
匹配特定字符串
应用场景 | 正则表达式 |
---|---|
匹配由 26 个英文字母组成的字符串 | ^[A-Za-z]+$ |
匹配由 26 个英文字母的大写组成的字符串 | ^[A-Z]+$ |
匹配由 26 个英文字母的小写组成的字符串 | ^[a-z]+$ |
匹配由数字和 26 个英文字母组成的字符串 | ^[A-Za-z0-9]+$ |
匹配由数字、26 个英文字母或者下划线组成的字符串 | ^\w+$ |
正则表达式应用实例
1. 删除每一行行尾的指定字符
比如:
1 | abc |
需要删除每行末尾的 “345”,即上面的文本最终删除为:
1 | abc |
解决:
- 在替换对话框中,启用 “正则表达式” 复选框
- 在查找内容里面输入“345$”,替换内容输入为空,然后点击“全部替换”按钮
其中,符号含义:$ 表示行尾,^ 表示行首
2. 删除指定字符串,不能留下空格
比如:
1 | abc |
需要删除每行的 “abc”,即上面的文本最终删除为:
1 |
|
解决:
- 在替换对话框中,启用 “正则表达式” 复选框
- 在查找内容里面输入“abc”,替换内容输入为空,然后点击“全部替换”按钮
其中,查找使用的是正则表达式中的普通字符
3. 替换指定内容到行尾
比如:
1 | 123 abc 444 |
希望每次遇到 “abc”,则替换 “abc” 以及其后到行尾的内容为 “abc efg”
即上面的文本最终替换为:
1 | 123 abc efg |
解决:
- 在替换对话框中,启用“正则表达式”复选框
- 在替换对话框,查找内容里输入“abc.*”,替换内容输入为 “abc efg”,然后点击 “全部替换” 按钮
其中,符号含义:. 表示任意字符,*表示(匹配)n次
4. 删除某个字符开始后的所有字符,包括该字符本身
比如:
1 | ksdlkfsld sd5bd |
希望每次遇到 “s”,则删除该字符之后的所有字符
即上面的文本最终替换为:
1 | k |
解决:
- 在替换对话框中,启用“正则表达式”复选框
- 在替换对话框,查找内容里输入“
^([^s]*)s.*$
”,替换内容输入为 “$1”,然后点击 “全部替换” 按钮
其中,符号含义:[^s] 匹配除 s 以外的字符,. 表示任意字符,*表示(匹配)n次
参考链接:
百度百科-正则表达式
百度百科-元字符
https://blog.csdn.net/wangjia55/article/details/7877915