正则1

正则1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
经常使⽤的分隔符是正斜线(/), hash符号(#) 以及取反符号(~)。建议使⽤//做为定界符,因为与js⼀致
系统提供的元字符(原子)
\d 匹配任意⼀个数字 [0-9]
\D 与除了数字以外的任何⼀个字符匹配 [^0-9]
\w 与任意⼀个英⽂字⺟,数字或下划线匹配 [a-zA-Z_]
\W 除了字⺟,数字或下划线外与任何字符匹配 [^a-zA-Z_]
\s 与任意⼀个空⽩字符匹配 [\n\f\r\t\v]
\n 换⾏字符
\t 制表符
\S 与除了空⽩符外任意⼀个字符匹配 [^\n\f\r\t\v]
[] 只匹配其中的一个原子
[^]  只匹配"除了"其中原子表中原子的任意一个原子
[0-9]  匹配0-9任何一个数字
[a-z]  匹配小写a-z任何一个字母
[A-Z]  匹配大写A-Z任何一个字母
. 点在正则中表示除换行符外的任意字符
| 这个符号带表选择修释符,也就是 | 左右两侧有⼀个匹配到就可以
在一组字符中匹配某个元字符,在正则表达式中通过元字符表来完成,就是放到[..](方
括号)中,一个[]代表一个原子

原子组和原子表:
• 如果一次要匹配多个元子,可以通过元子组完成
• 原子组与原子表的差别在于原子组一次匹配多个元子,而原子表则是匹配成
功表中的一个元字符就可以
• 原子组用()表示

重复匹配:处于原子表[]之外
如果要重复匹配⼀些内容时我们要使⽤重复匹配修饰符,包括以下⼏种
• * 重复零次或更多次
• + 重复⼀次或更多次
• ? 重复零次或⼀次
• {n} 重复n次
• {n,} 重复n次或更多次
• {n,m} 重复n到m次

禁止重复匹配:
正则表达式在进⾏重复匹配时,默认是贪婪匹配模式,也就是说会尽量匹配更多内
容,但是有的时候我们并不希望他匹配更多内容,这时可以通过?进⾏修饰来禁⽌重
复匹配
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

边界:
如果想匹配字符的边界,边界包括空格、标点符号、换⾏等,可以使⽤正则表达式
的匹配字符边界修饰符如下
匹配字符串边界:定界符//之内,原子组()之外
^ 匹配字符串的开始(当^出现在原子表[]的第一个字符时,表示取反)
$ 匹配字符串的结束,忽略换⾏符

模式修饰符:修饰表达式,处于定界符//之外
正则表达式在执⾏时会按他们的默认执⾏⽅式进⾏,但有时候默认的处理⽅式总不
能满⾜我们的需求,所以可以使⽤模式修正符更改默认⽅式。
• i 不区分⼤⼩写字⺟的匹配
• s 将字符串视为单⾏,换⾏符做普通字符看待,使“.”
匹 配任何字符
• e 将替换的字符串作为表达使⽤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
preg_match ( string $pattern , string $subject [,$matches])
搜索subject与pattern给定表达式匹配,若无$matches,成功返回1,否则返回0,若有$matches,符合的字符串部分将输出到$matches数组中,只要匹配到一个符合条件的就结束查找,

preg_match_all ( string $pattern , string $subject , array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0])
搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中

preg_split(string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]])
用正则表达式pattern分割subject,返回分割后的字符串数组,指定了limit则最多返回 limit 个子串,如果 limit 是 -1,则没有限制

preg_replace(mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]])
搜索subject中匹配pattern的部分, 以replacement进⾏替换

preg_replace_callback ( mixed $pattern , callback $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )
用callback 替代 replacement 进行替换字符串的计算,其他方面等同于 preg_replace()。调用时回调函数得到的参数是从subject 中匹配到的结果。若subject是数组则返回数组,其他返回替换后的字符串。

$preg = "/\.(baidu|sina)\./is”;//.baidu.或者。sinna符合的部分,不区分大小写,将字符串视为单⾏,换⾏符做普通字符看待,使“.”匹配任何字符看待
1
2
3
4
5
6
7
8
9
10
11
邮箱验证		手机号码验证			
/.+@.+/ /^[0-9]{11}$/

$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);
\\2是一个后向引用的示例.第一个\是转义,第二个\2匹配正则表达式中第二个圆括号(这里是([\w]+))
向后引用:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。https://blog.csdn.net/z69183787/article/details/52263988

/ \u{61} /
使用u修饰符,正则表达式能够识别大括号{}表示的Unicode字符,否则无法识别,{61}也会被解读为量词,表示61个u字符。
\xnn 匹配ASCII代码中十六进制代码为nn的字符

例子参考链接:
https://www.cnblogs.com/supe/p/7239157.html