正则表达式学习笔记

正则表达式 是一种用来匹配字符串的过滤规则。可能是最好的在线测试网站:regex.zjmainstay.cn

正则表达式 常常被称为模式
普通字符:为纯文本
元字符:在正则表达式里是的特殊字符 (比如. \ [ ] * ^等等)

用“.”只匹配除换行符外单个任意字符(包括数字、字母和“.”本身等)

.thou 可以匹配 ithouuthou6thou.thou!thou 等等

“[]”匹配[]中的某一个字符

[Ii]thou 可以匹配 ithouIthou
[0-9] 0-9中的任意一个数字
[a-z] 任意一个小写字母
[A-Z] 任意一个大学字母
H[0-9] 可以匹配 H1、H2、H3 …… H9
A[a-z] 匹配 Aa、Ab、… 、Az

- 在 [] 里面表示 xx 至/到 xxa 到 z, 0 到 9

取非 ^

^ 用来排除不需要匹配的字符
a[^0-9] 表示不匹配 a 后面带数字的,可以匹配 aaaAa?等等
[^Ii]love 不匹配 Iloveilove

用转义字符“\”匹配元字符本身

意思匹配那些特殊字符,比如 .[*
\[ 匹配文本中的[

[\.\]]
.asdkd{s.adn{sa]

匹配空白字符

\b 回退并删除
\n 换行符
\r 回车符
\t 制表符

匹配数字 & 非数字

[0-9]\d(小写w)匹配数字
[^0-9]\D匹配非数字

匹配字母,数字和下划线

\w 匹配 数字、字母、下划线 等价于[a-zA-Z0-9\_]

匹配字母,数字和下划线

\W匹配 非数字、字母、下划线 等价于 [^a-zA-Z0-9\_]

匹配任意空白字符

\s (小写s)匹配空格、制表符和换行符等空白字符,等价于 [\n\r\t\f\v]

匹配除空格、制表符和换行符以外的字符

\S (大写S),等价于 [^\n\r\t\f\v]

“+”匹配 1 ~ n个字符

“?”的两种用法

  • 匹配0个或者1个
    正则表达式 ?

  • 非贪婪模式
    匹配尽可能少的内容
    比如有文本HTML源码:

    1
    <div>a</div> <div>b</div>

    使用<div>.*?</div> 会得到两个结果:<div>a</div><div>b</div>

  • 贪婪模式
    而用 <div>.*</div> 会得到整个字符串:<div>a</div><div>b</div>
    因为它会匹配所有字符直到后面再找不到</div>

竖线“|”匹配子表达式中的分支

enter description here

(19|20)\d{2}
检验出生年为19xx和20xx年出生的

区间{}

[0-9]{1,3} 表示在0-9的范围里面循环1个、2个或者3个
{3} 指定为三个字符
{3, } 三个及以上,区间[3, +∞)
{3, n} 指定在区间 [3, n]

“\b”匹配一边是\w字符(英文字母、数字和下划线),另一边不是\w字符的位置(不占用字符)

p\b
匹配 You jump I jump. Importan!

^行首

^\w+ 匹配到 This is an example.

文末$

\w+$ 匹配到 End of string
对多行也有效

分隔符

在PHP中,分隔符可以使任意非字母数字非反斜线非空白字符
/<div>.*?</div>/ 这是错误的写法
#<div>.*?</div>#

———— The End ————