正则表达式

捕获组

1
2
3
([a-z]{2})\1(\d{2})\2


image-20211014131705857

image-20211014131748383

非捕获组

匹配到了,但无法继续使用\1

image-20211014131857235

预搜索(零宽断言)

image-20211014133216855

(最精简有用的)补充三:(看例子直接上手用)

(?=exp):零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。

匹配后面为_path,结果为product

‘product_path’.scan

1
(product)(?=_path)

image-20211014140406255

(?<=exp):零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp

匹配前面为name:,结果为wangfei

‘name:wangfei’.scan

1
(?<=name:)(wangfei)

image-20211014140429223

(?!exp):零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。

匹配后面不是_path

‘product_path’.scan

1
(product)(?!_path)

匹配后面不是_url

‘product_path’.scan

1
(product)(?!_url)

(?<!exp):零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp

匹配前面不是name:

‘name:angelica’.scan

1
(?<!name:)(angelica)

image-20211014140757073

匹配前面不是nick_name:

‘name:angelica’.scan

1
(?<!nick_name:)(angelica)

image-20211014140821894

各种电话正则

1
/^400[0-9]{7}|^1[34578]\d{9}$|^0[0-9]{2,3}-[0-9]{8}/

识别html标签-注意url解析的源码编码

1
2
<a[\s\S]+?</a>

image-20211015122931588

1
href=\".+?/"

image-20211015123957224

通过零宽断言-截取网址

移除左侧符号

1
(?<=(href=\"))(.+?/")

image-20211015125433505

移除首尾符号

1
((?<=(href=\"))(.+?))(?=/")

image-20211015125347483

(最精简有用的)补充三:(看例子直接上手用)

(?=exp):零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。

匹配后面为_path,结果为product

‘product_path’.scan

1
/(product)(?=_path)/

(?<=exp):零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp

匹配前面为name:,结果为wangfei

‘name:wangfei’.scan

1
/(?<=name:)(wangfei)/

(?!exp):零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。

匹配后面不是_path

‘product_path’.scan

1
/(product)(?!_path)/

匹配后面不是_url

‘product_path’.scan

1
/(product)(?!_url)/

(?<!exp):零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp

匹配前面不是name:

‘name:angelica’.scan

1
/(?<!name:)(angelica)/

匹配前面不是nick_name:

‘name:angelica’.scan

1
/(?<!nick_name:)(angelica)/

再次提醒,如果由于同样表达式在不同地方的断言方法名(断言表达式叫法)不一致引起不适的话请以补充三中的为准。溜了溜了。

谢谢大家的阅读。

要求

校验中文名
校验银行卡号
校验身份证号
校验邮箱地址

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* 判断是否为合法的中文名
* @param $name 名字
* @return bool
*/
function isChineseName($name) {
if (preg_match('/^([\xe4-\xe9][\x80-\xbf]{2}){2,4}$/', $name)) {
return true;
} else {
return false;
}
}


/**
* 判断是否为合法的银行卡号
* @param $banknum 银行卡号
* @return bool
*/
function isBanknumByLuhm($banknum) {
$n = 0;
for ($i = strlen($banknum); $i >= 1; $i--) {
$index=$i-1;
//偶数位
if ($i % 2==0) {
$n += $banknum{$index};
} else {//奇数位
$t = $banknum{$index} * 2;
if ($t > 9) {
$t = (int)($t/10)+ $t%10;
}
$n += $t;
}
}
return ($n % 10) == 0;
}

/**
* 判断是否为合法的身份证号码
* @param $idcard 身份证号
* @return bool
*/
function isIdcard($idcard){
if(strlen($idcard)==18){
return $this->idcard_checksum18($idcard);
}elseif((strlen($idcard)==15)){
$idcard = $this->idcard_15to18($idcard);
return $this->idcard_checksum18($idcard);
}else{
return false;
}
}
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base) {
if(strlen($idcard_base)!=17){
return false;
}
//加权因子
$factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
//校验码对应值
$verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');
$checksum=0;
for ($i=0; $i<strlen($idcard_base); $i++) {
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
}
$mod = $checksum % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard) {
if (strlen($idcard) != 15) {
return false;
} else {
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if (array_search(substr($idcard,12,3), array('996','997','998','999')) !== false) {
$idcard = substr($idcard,0,6).'18'.substr($idcard,6,9);
}else{
$idcard = substr($idcard,0,6).'19'.substr($idcard,6,9);
}
}
$idcard = $idcard.$this->idcard_verify_number($idcard);
return $idcard;
}
// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
if (strlen($idcard)!=18) {
return false;
}
$idcard_base = substr($idcard,0,17);
if ($this->idcard_verify_number($idcard_base) != strtoupper(substr($idcard,17,1))) {
return false;
} else {
return true;
}
}

/**
* 判断是否为合法的邮箱地址
* @param $email 邮箱地址
* @return bool
*/
function isEmail($email) {
$pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
if (preg_match($pattern, $email)) {
$reply = "您输入的电子邮件地址合法<br /><br />\n";
$user_name = preg_replace($pattern ,"$1", $email);
$domain_name = preg_replace($pattern ,"$2", $email);
$reply .= "用户名:".$user_name."<br />\n";
$reply .= "域名:".$domain_name."<br />\n\n";
return true;
} else {
$reply = "您输入的电子邮件地址不合法";
return false;
}
}

sublime筛选指定的文件

1
H:\学习\WEB\,*.md

image-20211015130506836