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

作用

查找特殊规则的字符串

编写一个正则表达式,用来查找所有以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"

?<! 负向后行断言

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

"(?<!(T|t)he\s)(cat)" => 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})*$
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值