正则表达式 Regex
Regular Expression, 通常使用它的缩写 regex 或者 regexp, 正则表达式可以被用来替换字符串中的文本、验证表单、基于模式匹配从一个字符串中提取字符串等等。
正则表达式是一种被用于从文本中检索符合某些特定模式的文本。
这个知识点说大不大,说小也不小。但是做业务的数据处理时经常用到,所以,务必要掌握一些常用的才行。
推荐阅读的话,就那本很厚的《精通正则表达式》吧!
基本知识
正则表达式中可以使用多个常见字符和特殊字符。
- 普通字符: 正则表达式中的普通字符与自身匹配。普通字符是描述为特殊字符之外的字符。
( ) [ ] ^ $ . * + ? | \
- 特殊字符 特殊字符影响正则表达式的匹配行为(如下表所述)。匹配任意长度字符的序列的构造(例如 * + ?)始终匹配允许匹配项的左侧最长的字符串。
表: 特殊字符及其涵义
字符 含义 示例
^ 匹配字符串的开头部分 "^abc" 与以 abc 开头的字符串匹配
$ 匹配字符串的结尾 "abc$" 与以 abc 结尾的字符串匹配
. 匹配任何单个字符(除换行符外) "a.c$" 与包含 abc、axc 等的字符串匹配
* 匹配零个或更多个紧挨的前项表达式 "ab*c$" 与包含 ac、abc、abbc 等的字符串匹配
+ 匹配一个或多个紧挨的前项表达式 "a+c$" 与包含 abc、abbc 或 aggc 的字符串匹配,但不与包含 ac 的字符串匹配
? 匹配零个或一个紧挨的前项表达式 "ab?c" 与包含 ac 或 abc 的字符串匹配
| 匹配前项表达式或后项表达式。 "a|b|c" 与包含 a、b 或 c 的字符串匹配
[ ] 匹配方括号中列出的任何单个字符 "[ab]c" 与包含 ac 或 bc 的字符串匹配
[^ ] 匹配方括号中未列出的任何单个字符 "a[^b]c" 与包含 axc(其中 x 替换为除 b 之外的任何字符)的字符串匹配
\ 转义后面紧挨的字符。要在字符串中嵌入反斜杠字符,字符串字面值必须包含两个连续的反斜杠。 "a\.c$" 与包含 a.c 的字符串匹配,"a\\c$" 与包含 a\c 的字符串匹配
( ) 划分子表达式界限 "a(b|c)*d*" 与包含 a 并且后跟任意数量的 b 或 c 再后跟 d 的字符串(如 "ad" 或 "acbbccd")匹配
{n,m} 花括号,匹配前面字符至少 n 次,但是不超过 m 次。
(xyz) 字符组,按照确切的顺序匹配字符 xyz。
常用正则表达式
正整数:^\d+$
负整数:^-\d+$
电话号码:^+?[\d\s]{3,}$
电话代码:^+?[\d\s]+(?[\d\s]{10,}$
整数:^-?\d+$
用户名:^[\w\d_.]{4,16}$
字母数字字符:^[a-zA-Z0-9]*$
带空格的字母数字字符:^[a-zA-Z0-9 ]*$
密码:^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$
电子邮件:^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$
IPv4 地址:^((?:(?: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]?))*$
小写字母:^([a-z])*$
大写字母:^([A-Z])*$
网址:^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
VISA 信用卡号码:^(4[0-9]{12}(?:[0-9]{3})?)*$
日期(MM/DD/YYYY):^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
日期(YYYY/MM/DD):^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$
万事达信用卡号码:^(5[1-5][0-9]{14})*$
实际使用过的正则表达式:
辅助工具
- 在线正则测试工具 -- 支持多语言正则在线调试,很好用。
REF
- LEARN REGEX - 翻文:学习正则表达式的简单方法