【无标题】正则表达式笔记

作用

查找特殊规则的字符串

编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。

0\d{2,3}-\d{7,8}

基本匹配

区分大小写

cat

会匹配"cat"

CAt

会匹配"CAt"

元字符

元字符是正则表达式的基本组成元素。元字符在这里跟它通常表达的意思不一样,而是以某种特殊的含义去解释。有些元字符在写在方括号内时有特殊含义。

元字符 描述
. 匹配除换行符以外的任意字符。
[ ] 字符类,匹配方括号中包含的任意字符。
[^ ] 否定字符类。匹配方括号中不包含的任意字符
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
{n,m} 花括号,匹配前面字符至少 n 次,但是不超过 m 次。
(xyz) 字符组,按照确切的顺序匹配字符 xyz。
| 分支结构,匹配符号之前的字符或后面的字符。
\ 转义符,它可以还原元字符原来的含义,允许你匹配保留字符 [ ] ( ) { } . * + ? ^ $ \
^ 匹配行的开始
$ 匹配行的结束

简写字符集

简写 描述
. 匹配除换行符以外的任意字符
\w 匹配所有字母和数字的字符:[a-zA-Z0-9_]
\W 匹配非字母和数字的字符:[^\w]
\d 匹配数字:[0-9]
\D 匹配非数字:[^\d]
\s 匹配空格符:[\t\n\f\r\p{Z}]
\S 匹配非空格符:[^\s]

断言

后行断言和先行断言有时候被称为断言,它们是特殊类型的 非捕获组(用于匹配模式,但不包括在匹配列表中)。当我们在一种特定模式之前或者之后有这种模式时,会优先使用断言。 例如我们想获取输入字符串 $4.44 and $10.88 中带有前缀 $ 的所有数字。我们可以使用这个正则表达式 表示:获取包含 . 字符且前缀为 $ 的所有数字。

(?<=\$)[0-9\.]*

?= 正向先行断言

正向先行断言认为第一部分的表达式的后面必须是先行断言表达式。返回的匹配结果仅包含与第一部分表达式匹配的文本。 要在一个括号内定义一个正向先行断言,在括号中问号和等号是这样使用的 (?=…)。先行断言表达式写在括号中的等号后面。 例如正则表达式 (T|t)he(?=\sfat),表示:匹配大写字母 T 或小写字母 t,后面跟字母 h,后跟字母 e。 在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配后面跟着 fat 的 The 或 the。

"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
匹配 "The"

?! 负向先行断言

当我们需要指定第一部分表达式的后面不跟随某一内容时,使用负向先行断言。负向先行断言的定义跟我们定义的正向先行断言一样, 唯一的区别在于我们使用否定符号 ! 而不是等号 =,例如 (?!..)。 我们来看看下面的正则表达式 (T|t)he(?!\sfat),表示:从输入字符串中获取全部 The 或者 the 且不匹配 fat 前面加上一个空格字符。

"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
匹配 "the"

?<= 正向后行断言

正向后行断言用于获取跟随在特定模式之后的所有匹配内容。正向后行断言表示为 (?<=…)。例如正则表达式 (?<=(T|t)he\s)(fat|mat),表示:从输入字符串中获取在单词 The 或 the 之后的所有 fat 和 mat 单词。

"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
匹配 "fat" 和"mat"

?

负向后行断言是用于获取不跟随在特定模式之后的所有匹配的内容。负向后行断言表示为 (?

"(? The cat sat on cat.
匹配 最后一个"cat"

标记(修饰符)

修改正则表达式的输出。这些标志可以以任意顺序或组合使用,并且是正则表达式的一部分。

i

不区分大小写:将匹配设置为不区分大小写。

g

全局搜索:搜索整个输入字符串中的所有匹配

m

多行匹配:会匹配输入字符串每一行

例子

不区分大小写

i 修饰符用于执行不区分大小写匹配。例如正则表达式 /The/gi,表示:大写字母 T,后跟小写字母 h,后跟字母 e。 但是在正则匹配结束时 i 标记会告诉正则表达式引擎忽略这种情况。正如你所看到的,我们还使用了 g 标记,因为我们要在整个输入字符串中搜索匹配。

"The" => The fat cat sat on the mat.
匹配"The"
"/The/gi" => The fat cat sat on the mat.
匹配 "The" 和"the"

全局搜索

g 修饰符用于执行全局匹配(会查找所有匹配,不会在查找到第一个匹配时就停止)。 例如正则表达式 /.(at)/g,表示:除换行符之外的任意字符,后跟小写字母 a,后跟小写字母 t。 因为我们在正则表达式的末尾使用了 g 标记,它会从整个输入字符串中找到每个匹配项。

".(at)" => The fat cat sat on the mat.
匹配"fat"
"/.(at)/g" => The fat cat sat on the mat.
匹配"fat" "cat" "sat" 和"mat"

多行匹配

m 修饰符被用来执行多行的匹配。正如我们前面讨论过的 (^, ) ,使用定位符来检查匹配字符是输入字符串开始或者结束。但是我们希望每一行都使用定位符,所以我们就使用 m 修饰符。例如正则表达式 / a t ( . ) ? ),使用定位符来检查匹配字符是输入字符串开始或者结束。但是我们希望每一行都使用定位符,所以我们就使用 m 修饰符。 例如正则表达式 /at(.)? ),使用定位符来检查匹配字符是输入字符串开始或者结束。但是我们希望每一行都使用定位符,所以我们就使用m修饰符。例如正则表达式/at(.)?/gm,表示:小写字母 a,后跟小写字母 t,匹配除了换行符以外任意字符零次或一次。而且因为 m 标记,现在正则表达式引擎匹配字符串中每一行的末尾。

"/.at(.)?$/" => The fat
                       cat sat
                       on the mat.
匹配"mat"

"/.at(.)?$/gm" => The fat
                            cat sat
                            on the mat.
匹配"fat" "sat" "mat"

正整数

^\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})*$

你可能感兴趣的:(正则表达式,笔记)