<aside> 💡
速查表
</aside>
**PHP中使用正则规则一定要加代表正则的标识/ /
preg_matc(正则表达式、匹配字符串、匹配到的东西放入数组)
preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)
返回匹配到的次数
preg_replace (正则表达式、替换成什么、匹配字符串)
返回替换后的结果
替换支持数组格式
常用转义字符:
数字:\\d
非数字:\\D
空白字符(空格、制表符、换页符等):\\s
非空白字符:\\S
单词字符(26个英文字母+数字+下划线_):\\w
非单词字符:\\W
自定义字符结合
字符集合:[单个字符或字符区间],用于匹配集合内字符
如:
[a-z]表示a-z这26个小写字母
[0-9a-z]表示0-9这10个数字和a-z26个小写字母
[135a-h]表示包含数字1,3,5和字母a-h这8个字母
注意:两个不同字符段间请勿使用,隔开。
非集:[^单个字符或字符区间],用于匹配非集合内字符。
如:
[^0-9]表示匹配所有非数字字符。
[^a-zA-Z]表示匹配所以非字母字符。
() => 和数学一样很像,代表这是一个整体。
^ => 匹配输入字符串的开始位置
$ => 匹配输入字符串的结尾位置
. => 通配符[代表任意字符][不匹配换行]
* => 匹配0次或者多次
+ => 匹配1次或者多次
\\ => 转义字符
| => 两项之间的一个选择。
() => 和数学一样很像,代表这是一个整体。
^ => 匹配输入字符串的开始位置
$ => 匹配输入字符串的结尾位置
. => 通配符[代表任意字符][不匹配换行]
* => 匹配0次或者多次
+ => 匹配1次或者多次
\\ => 转义字符
| => 两项之间的一个选择。
限定符:
{n} => 例如: 0{8} 意思是指 只有连起来8个0才会被匹配
{n,} =>例如: 0{2,} 意思是 只要有2个0及其以上的就会被匹配
{n,m} => 例如: 0{2,4} 意思是最少匹配2个0,最多匹配4个0
注:被匹配时,默认匹配最多的次数
修饰符:
/i => 不区分大小写
/A => 匹配规则必须从头开始匹配
/s => .将匹配一切字符
/x => 正则表达式中的空白字符会被忽略
/e => 代码执行 仅限preg_replace() => 可以写一句话但是不能连接菜刀
file_put_contents 函数 [把字符串写入文件]
file_put_contents(写入文件的地址,写入的文件的内容)**
<aside> 💡
元字符
</aside>
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
$ | 匹配字符串的结束 |
\d\w\s
匹配第一个字符为数字,第二个字符为字母或数字、或下划线或汉字,第三字符为空格的字符串 例如:11 ,2a , 1_
^\d\d\d$
匹配三个全部都为数字的字符串 例如: 123,456,789
<aside> 💡
反义字符
</aside>
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
详解和示例:
(1)\W 匹配除字母、数字、下划线、汉字以为的字符形如 +,-,*
(2)\S 匹配除空格以外的任意字符形如:1, ,)*
(3)[^abcde]匹配除abcde以为的其他字符 如 e,f,g,h
<aside> 💡
限定字符
</aside>
代码/语法 | 说明 |
---|---|
***** | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
详解和示例:
(1)\d 匹配重复0次或多次数字 例如:可能为空 或 任意数字 (2,3。。。。)*
(2)\d+ 匹配重复1次或多次数字 例如:可能为1个或多个数字 1,23,234,2345,........
(3)\d? 匹配重复次个或者一次数字 例如:可能为空或者任意的一个数字(1,2,。。。)
(4)\d{8}匹配重复8次数字 例如:123456768
(5)\d{4,}匹配重复至少4次数字 例如:1234,12345,124244,。。。。。
(6)^\d{8,11}$ 匹配重复8-11次数字 例如:12345678,123456789,1234567890,12345678901
四、转义字符
在实际的开发中,可能会遇到要比配元字符的情况,这个时候就需要进行字符转义,如元字符 . * \ 需要转换为\. \ \\*
例如: 需要匹配qq邮箱 \d{8,11}@qq\.com 在这里的. 就需要加斜杠
<aside> 💡
分组语法
</aside>
分类 | 代码/语法 | 说明 |
---|---|---|
捕获 | (exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) | |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 | |
零宽断言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 | |
(?!exp) | 匹配后面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
注释 | (?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
<aside> 💡
懒惰匹配和贪婪匹配
</aside>
代码/语法 | 说明 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
<aside> 💡
修饰符
</aside>
修饰符 | 含义 | 描述 |
---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
s | 特殊字符圆点 . 中包含换行符 \n | 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。 |
<aside> 💡
其他语法
</aside>
代码/语法 | 说明 |
---|---|
\a | 报警字符(打印它的效果是电脑嘀一声) |
\b | 通常是单词分界位置,但如果在字符类里使用代表退格 |
\t | 制表符,Tab |
\r | 回车 |
\v | 竖向制表符 |
\f | 换页符 |
\n | 换行符 |
\e | Escape |
\0nn | ASCII代码中八进制代码为nn的字符 |
\xnn | ASCII代码中十六进制代码为nn的字符 |
\unnnn | Unicode代码中十六进制代码为nnnn的字符 |
\cN | ASCII控制字符。比如\cC代表Ctrl+C |
\A | 字符串开头(类似^,但不受处理多行选项的影响) |
\Z | 字符串结尾或行尾(不受处理多行选项的影响) |
\z | 字符串结尾(类似$,但不受处理多行选项的影响) |
\G | 当前搜索的开头 |
\p{name} | Unicode中命名为name的字符类,例如\p{IsGreek} |
(?>exp) | 贪婪子表达式 |
(?<x>-<y>exp) | 平衡组 |
(?im-nsx:exp) | 在子表达式exp中改变处理选项 |
(?im-nsx) | 为表达式后面的部分改变处理选项 |
R | 不是一个具体的字符,而是一个正则表达式中的特殊标记,表示递归匹配 |
<aside> 💡
大综合
</aside>
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。‘\n’ 匹配一个换行符。序列 ‘\\’ 匹配 “\” 而 “\(” 则匹配 “(”。 |
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性(也就是是否以多行模式匹配),^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性(也就是是否以多行模式匹配),$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。 |
? | 当该字符紧跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,‘o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。(也就是说?在限制符、通配中如果出现在最后,优先级最高。) |
. | 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像"(. |
x | y |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’、‘l’、‘i’、‘n’。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,‘[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。 |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,‘[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。 |
\B | 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\cx | 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。 |
\f \n \r \t \v | 分别等价于换页符\x0c 和 \cL、 换行符\x0a 和 \cJ、回车符\x0d 和 \cM、制表符\x09 和 \cI、垂直制表符\x0b 和 \cK 。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]'。 |
\W | 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。 |
(?R)?- | 这是一个递归匹配的子模式。(?R) 表示在此处递归匹配整个正则表达式。而 ? 表示此模式可选 |
其余一些不常用的元字符我们可以在使用时查找定义。在上面这些常用的元字符中,基本包括了所有的可见、不可见字符和匹配模式。 | |