正则表达式 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 - 翻文:学习正则表达式的简单方法