|
| 1 | +# [POSIX] 标准正则表达式 |
| 2 | + |
| 3 | +目前正则表达式主要有 [PCRE] 和 [POSIX] 两大标准,[POSIX] 又分为 BRE(grep、sed 等)、GNU BRE(GNU grep、GNU sed 等)、ERE(egrep、awk 等)、GNU ERE(grep –E、GNU awk 等)以及已经被废弃的 SRE 几种流派,彼此之间的语法都有差异。 |
| 4 | + |
| 5 | +由于 [PCRE] 标准被各种常用编程语言广泛支持,所以本项目中的正则表达式都是 [PCRE] 的。而 [POSIX] 标准目前主要被各种 Unix-like 系统内置命令所支持,例如常用的 Linux 系统中的 `awk`, `sed` 等命令。 |
| 6 | + |
| 7 | +由于 Unix-like 系统众多,历史悠久,同一个命令有众多种实现版本(例如 `awk` 就有 `awk`,`gawk`,`mawk`,`nawk` 等众多实现),并且同一个系统中不同的命令还可能存在使用不同流派的情况,很难做到兼容所有流派和命令,故本文档所列出的正则表达式仅兼容以下两种流派: |
| 8 | + |
| 9 | +- GNU BRE(gsed - GNU sed) |
| 10 | +- GNU ERE(gawk - GNU awk,ggrep - GNU grep) |
| 11 | + |
| 12 | +如需了解更多,可以阅读[维基百科 - Regular expression]。 |
| 13 | + |
| 14 | +## 正则表达式 |
| 15 | + |
| 16 | +### 匹配所有号码(手机卡 + 数据卡 + 上网卡) |
| 17 | + |
| 18 | +<!-- |
| 19 | +请注意: |
| 20 | +由于 GitHub Markdown 要求在表格中插入的 '|' 符号需要转义,所以: |
| 21 | +
|
| 22 | +- 所有 GNU ERE 正则中的 '|' 前面的 '\' 都是为了转义 '|'。 |
| 23 | +- 所有 GNU BRE 正则中的 '|' 前面的 '\\' 都是为了转义 '\|'。 |
| 24 | +
|
| 25 | +这些转义字符并不是正则表达式所需要的。在您修改正则表达式的时候请多加小心。 |
| 26 | +为了防止渲染出现错误,所有的正则表达式都需要在注释中写清转义之前的语句。 |
| 27 | +参见 https://help.github.com/articles/organizing-information-with-tables/#formatting-content-within-your-table |
| 28 | +--> |
| 29 | + |
| 30 | +<!-- |
| 31 | +| GNU ERE | `^(+?86)?1(3[0-9]{3}|5[012356789][0-9]{2}|8[0-9]{3}|7([01356789][0-9]{2}|4(0[0-9]|1[0-2]|9[0-9]))|9[189][0-9]{2}|6[567][0-9]{2}|4([14]0[0-9]{3}|[68][0-9]{4}|[579][0-9]{2}))[0-9]{6}$` | |
| 32 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-9]\{3\}\|5[012356789][0-9]\{2\}\|8[0-9]\{3\}\|7\([01356789][0-9]\{2\}\|4\(0[0-9]\|1[0-2]\|9[0-9]\)\)\|9[189][0-9]\{2\}\|6[567][0-9]\{2\}\|4\([14]0[0-9]\{3\}\|[68][0-9]\{4\}\|[579][0-9]\{2\}\)\)[0-9]\{6\}$` | |
| 33 | +--> |
| 34 | + |
| 35 | +| 命令 | 正则表达式 | |
| 36 | +| --- | --- | |
| 37 | +| GNU ERE | `^(+?86)?1(3[0-9]{3}\|5[012356789][0-9]{2}\|8[0-9]{3}\|7([01356789][0-9]{2}\|4(0[0-9]\|1[0-2]\|9[0-9]))\|9[189][0-9]{2}\|6[567][0-9]{2}\|4([14]0[0-9]{3}\|[68][0-9]{4}\|[579][0-9]{2}))[0-9]{6}$` | |
| 38 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-9]\{3\}\\|5[012356789][0-9]\{2\}\\|8[0-9]\{3\}\\|7\([01356789][0-9]\{2\}\\|4\(0[0-9]\\|1[0-2]\\|9[0-9]\)\)\\|9[189][0-9]\{2\}\\|6[567][0-9]\{2\}\\|4\([14]0[0-9]\{3\}\\|[68][0-9]\{4\}\\|[579][0-9]\{2\}\)\)[0-9]\{6\}$` | |
| 39 | + |
| 40 | +### 匹配所有支持短信功能的号码(手机卡 + 上网卡) |
| 41 | + |
| 42 | +<!-- |
| 43 | +| GNU ERE | `^(+?86)?1(3[0-9]{3}|5[012356789][0-9]{2}|8[0-9]{3}|7([01356789][0-9]{2}|4(0[0-9]|1[0-2]|9[0-9]))|9[189][0-9]{2}|6[567][0-9]{2}|4[579][0-9]{2})[0-9]{6}$` | |
| 44 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-9]\{3\}\|5[012356789][0-9]\{2\}\|8[0-9]\{3\}\|7\([01356789][0-9]\{2\}\|4\(0[0-9]\|1[0-2]\|9[0-9]\)\)\|9[189][0-9]\{2\}\|6[567][0-9]\{2\}\|4[579][0-9]\{2\}\)[0-9]\{6\}$` | |
| 45 | + --> |
| 46 | + |
| 47 | +| 命令 | 正则表达式 | |
| 48 | +| --- | --- | |
| 49 | +| GNU ERE | `^(+?86)?1(3[0-9]{3}\|5[012356789][0-9]{2}\|8[0-9]{3}\|7([01356789][0-9]{2}\|4(0[0-9]\|1[0-2]\|9[0-9]))\|9[189][0-9]{2}\|6[567][0-9]{2}\|4[579][0-9]{2})[0-9]{6}$` | |
| 50 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-9]\{3\}\\|5[012356789][0-9]\{2\}\\|8[0-9]\{3\}\\|7\([01356789][0-9]\{2\}\\|4\(0[0-9]\\|1[0-2]\\|9[0-9]\)\)\\|9[189][0-9]\{2\}\\|6[567][0-9]\{2\}\\|4[579][0-9]\{2\}\)[0-9]\{6\}$` | |
| 51 | + |
| 52 | +### 手机卡 |
| 53 | + |
| 54 | +#### 匹配所有 |
| 55 | + |
| 56 | +<!-- |
| 57 | +| GNU ERE | `^(+?86)?1(3[0-9]{3}|5[012356789][0-9]{2}|8[0-9]{3}|7([35678][0-9]{2}|4(0[0-9]|1[0-2]|9[0-9]))|9[189][0-9]{2}|66[0-9]{2})[0-9]{6}$` | |
| 58 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-9]\{3\}\|5[012356789][0-9]\{2\}\|8[0-9]\{3\}\|7\([35678][0-9]\{2\}\|4\(0[0-9]\|1[0-2]\|9[0-9]\)\)\|9[189][0-9]\{2\}\|66[0-9]\{2\}\)[0-9]\{6\}$` | |
| 59 | + --> |
| 60 | + |
| 61 | +| 命令 | 正则表达式 | |
| 62 | +| --- | --- | |
| 63 | +| GNU ERE | `^(+?86)?1(3[0-9]{3}\|5[012356789][0-9]{2}\|8[0-9]{3}\|7([35678][0-9]{2}\|4(0[0-9]\|1[0-2]\|9[0-9]))\|9[189][0-9]{2}\|66[0-9]{2})[0-9]{6}$` | |
| 64 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-9]\{3\}\\|5[012356789][0-9]\{2\}\\|8[0-9]\{3\}\\|7\([35678][0-9]\{2\}\\|4\(0[0-9]\\|1[0-2]\\|9[0-9]\)\)\\|9[189][0-9]\{2\}\\|66[0-9]\{2\}\)[0-9]\{6\}$` | |
| 65 | + |
| 66 | +#### 匹配中国移动 |
| 67 | + |
| 68 | +<!-- |
| 69 | +| GNU ERE | `^(+?86)?1(3(4[0-8]|[5-9][0-9])|5[012789][0-9]|8[23478][0-9]|(78|98)[0-9])[0-9]{7}$` | |
| 70 | +| GNU BRE | `^\(+\?86\)\?1\(3\(4[0-8]\|[5-9][0-9]\)\|5[012789][0-9]\|8[23478][0-9]\|\(78\|98\)[0-9]\)[0-9]\{7\}$` | |
| 71 | + --> |
| 72 | + |
| 73 | +| 命令 | 正则表达式 | |
| 74 | +| --- | --- | |
| 75 | +| GNU ERE | `^(+?86)?1(3(4[0-8]\|[5-9][0-9])\|5[012789][0-9]\|8[23478][0-9]\|(78\|98)[0-9])[0-9]{7}$` | |
| 76 | +| GNU BRE | `^\(+\?86\)\?1\(3\(4[0-8]\\|[5-9][0-9]\)\\|5[012789][0-9]\\|8[23478][0-9]\\|\(78\\|98\)[0-9]\)[0-9]\{7\}$` | |
| 77 | + |
| 78 | +#### 匹配中国联通 |
| 79 | + |
| 80 | +<!-- |
| 81 | +| GNU ERE | `^(+?86)?1(3[0-2]|[578][56]|66)[0-9]{8}$` | |
| 82 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-2]\|[578][56]\|66\)[0-9]\{8\}$` | |
| 83 | + --> |
| 84 | + |
| 85 | +| 命令 | 正则表达式 | |
| 86 | +| --- | --- | |
| 87 | +| GNU ERE | `^(+?86)?1(3[0-2]\|[578][56]\|66)[0-9]{8}$` | |
| 88 | +| GNU BRE | `^\(+\?86\)\?1\(3[0-2]\\|[578][56]\\|66\)[0-9]\{8\}$` | |
| 89 | + |
| 90 | +#### 匹配中国电信 |
| 91 | + |
| 92 | +<!-- |
| 93 | +| GNU ERE | `^(+?86)?1(3(3[0-9]|49)[0-9]|53[0-9]{2}|8[019][0-9]{2}|7([37][0-9]{2}|40[0-5])|9[19][0-9]{2})[0-9]{6}$` | |
| 94 | +| GNU BRE | `^\(+\?86\)\?1\(3\(3[0-9]\|49\)[0-9]\|53[0-9]\{2\}\|8[019][0-9]\{2\}\|7\([37][0-9]\{2\}\|40[0-5]\)\|9[19][0-9]\{2\}\)[0-9]\{6\}$` | |
| 95 | + --> |
| 96 | + |
| 97 | +| 命令 | 正则表达式 | |
| 98 | +| --- | --- | |
| 99 | +| GNU ERE | `^(+?86)?1(3(3[0-9]\|49)[0-9]\|53[0-9]{2}\|8[019][0-9]{2}\|7([37][0-9]{2}\|40[0-5])\|9[19][0-9]{2})[0-9]{6}$` | |
| 100 | +| GNU BRE | `^\(+\?86\)\?1\(3\(3[0-9]\\|49\)[0-9]\\|53[0-9]\{2\}\\|8[019][0-9]\{2\}\\|7\([37][0-9]\{2\}\\|40[0-5]\)\\|9[19][0-9]\{2\}\)[0-9]\{6\}$` | |
| 101 | + |
| 102 | +#### 匹配北京船舶通信导航有限公司(海事卫星通信) |
| 103 | + |
| 104 | +<!-- |
| 105 | +| GNU ERE | `^(+?86)?1749[0-9]{7}$` | |
| 106 | +| GNU BRE | `^\(+\?86\)\?1749[0-9]\{7\}$` | |
| 107 | + --> |
| 108 | + |
| 109 | +| 命令 | 正则表达式 | |
| 110 | +| --- | --- | |
| 111 | +| GNU ERE | `^(+?86)?1749[0-9]{7}$` | |
| 112 | +| GNU BRE | `^\(+\?86\)\?1749[0-9]\{7\}$` | |
| 113 | + |
| 114 | +#### 工业和信息化部应急通信保障中心(应急通信) |
| 115 | + |
| 116 | +<!-- |
| 117 | +| GNU ERE | `^(+?86)?174(0[6-9]|1[0-2])[0-9]{6}$` | |
| 118 | +| GNU BRE | `^\(+\?86\)\?174\(0[6-9]\|1[0-2]\)[0-9]\{6\}$` | |
| 119 | + --> |
| 120 | + |
| 121 | +| 命令 | 正则表达式 | |
| 122 | +| --- | --- | |
| 123 | +| GNU ERE | `^(+?86)?174(0[6-9]\|1[0-2])[0-9]{6}$` | |
| 124 | +| GNU BRE | `^\(+\?86\)\?174\(0[6-9]\\|1[0-2]\)[0-9]\{6\}$` | |
| 125 | + |
| 126 | +### 虚拟运营商 |
| 127 | + |
| 128 | +#### 匹配所有 |
| 129 | + |
| 130 | +<!-- |
| 131 | +| GNU ERE | `^(+?86)?1(7[01]|6[57])[0-9]{8}$` | |
| 132 | +| GNU BRE | `^\(+\?86\)\?1\(7[01]\|6[57]\)[0-9]\{8\}$` | |
| 133 | + --> |
| 134 | + |
| 135 | +| 命令 | 正则表达式 | |
| 136 | +| --- | --- | |
| 137 | +| GNU ERE | `^(+?86)?1(7[01]\|6[57])[0-9]{8}$` | |
| 138 | +| GNU BRE | `^\(+\?86\)\?1\(7[01]\\|6[57]\)[0-9]\{8\}$` | |
| 139 | + |
| 140 | +#### 匹配中国移动 |
| 141 | + |
| 142 | +<!-- |
| 143 | +| GNU ERE | `^(+?86)?1(65[0-9]|70[356])[0-9]{7}$` | |
| 144 | +| GNU BRE | `^\(+\?86\)\?1\(65[0-9]\|70[356]\)[0-9]\{7\}$` | |
| 145 | + --> |
| 146 | + |
| 147 | +| 命令 | 正则表达式 | |
| 148 | +| --- | --- | |
| 149 | +| GNU ERE | `^(+?86)?1(65[0-9]\|70[356])[0-9]{7}$` | |
| 150 | +| GNU BRE | `^\(+\?86\)\?1\(65[0-9]\\|70[356]\)[0-9]\{7\}$` | |
| 151 | + |
| 152 | +#### 匹配中国联通 |
| 153 | + |
| 154 | +<!-- |
| 155 | +| GNU ERE | `^(+?86)?1(70[4789]|71[0-9]|67[0-9])[0-9]{7}$` | |
| 156 | +| GNU BRE | `^\(+\?86\)\?1\(70[4789]\|71[0-9]\|67[0-9]\)[0-9]\{7\}$` | |
| 157 | + --> |
| 158 | + |
| 159 | +| 命令 | 正则表达式 | |
| 160 | +| --- | --- | |
| 161 | +| GNU ERE | `^(+?86)?1(70[4789]\|71[0-9]\|67[0-9])[0-9]{7}$` | |
| 162 | +| GNU BRE | `^\(+\?86\)\?1\(70[4789]\\|71[0-9]\\|67[0-9]\)[0-9]\{7\}$` | |
| 163 | + |
| 164 | +#### 匹配中国电信 |
| 165 | + |
| 166 | +<!-- |
| 167 | +| GNU ERE | `^(+?86)?170[0-2][0-9]{7}$` | |
| 168 | +| GNU BRE | `^\(+\?86\)\?170[0-2][0-9]\{7\}$` | |
| 169 | + --> |
| 170 | + |
| 171 | +| 命令 | 正则表达式 | |
| 172 | +| --- | --- | |
| 173 | +| GNU ERE | `^(+?86)?170[0-2][0-9]{7}$` | |
| 174 | +| GNU BRE | `^\(+\?86\)\?170[0-2][0-9]\{7\}$` | |
| 175 | + |
| 176 | +### 物联网数据卡 |
| 177 | + |
| 178 | +#### 匹配所有 |
| 179 | + |
| 180 | +<!-- |
| 181 | +| GNU ERE | `^(+?86)?14([14]0|[68][0-9])[0-9]{9}$` | |
| 182 | +| GNU BRE | `^\(+\?86\)\?14\([14]0\|[68][0-9]\)[0-9]\{9\}$` | |
| 183 | + --> |
| 184 | + |
| 185 | +| 命令 | 正则表达式 | |
| 186 | +| --- | --- | |
| 187 | +| GNU ERE | `^(+?86)?14([14]0\|[68][0-9])[0-9]{9}$` | |
| 188 | +| GNU BRE | `^\(+\?86\)\?14\([14]0\\|[68][0-9]\)[0-9]\{9\}$` | |
| 189 | + |
| 190 | +#### 匹配中国移动 |
| 191 | + |
| 192 | +<!-- |
| 193 | +| GNU ERE | `^(+?86)?14(40|8[0-9])[0-9]{9}$` | |
| 194 | +| GNU BRE | `^\(+\?86\)\?14\(40\|8[0-9]\)[0-9]\{9\}$` | |
| 195 | + --> |
| 196 | + |
| 197 | +| 命令 | 正则表达式 | |
| 198 | +| --- | --- | |
| 199 | +| GNU ERE | `^(+?86)?14(40\|8[0-9])[0-9]{9}$` | |
| 200 | +| GNU BRE | `^\(+\?86\)\?14\(40\\|8[0-9]\)[0-9]\{9\}$` | |
| 201 | + |
| 202 | +#### 匹配中国联通 |
| 203 | + |
| 204 | +| 命令 | 正则表达式 | |
| 205 | +| --- | --- | |
| 206 | +| GNU ERE | `^(+?86)?146[0-9]{10}$` | |
| 207 | +| GNU BRE | `^\(+\?86\)\?146[0-9]\{10\}$` | |
| 208 | + |
| 209 | +#### 匹配中国电信 |
| 210 | + |
| 211 | +| 命令 | 正则表达式 | |
| 212 | +| --- | --- | |
| 213 | +| GNU ERE | `^(+?86)?1410[0-9]{9}$` | |
| 214 | +| GNU BRE | `^\(+\?86\)\?1410[0-9]\{9\}$` | |
| 215 | + |
| 216 | +### 上网卡 |
| 217 | + |
| 218 | +#### 匹配所有 |
| 219 | + |
| 220 | +| 命令 | 正则表达式 | |
| 221 | +| --- | --- | |
| 222 | +| GNU ERE | `^(+?86)?14[579][0-9]{8}$` | |
| 223 | +| GNU BRE | `^\(+\?86\)\?14[579][0-9]\{8\}$` | |
| 224 | + |
| 225 | +#### 匹配中国移动 |
| 226 | + |
| 227 | +| 命令 | 正则表达式 | |
| 228 | +| --- | --- | |
| 229 | +| GNU ERE | `^(+?86)?147[0-9]{8}$` | |
| 230 | +| GNU BRE | `^\(+\?86\)\?147[0-9]\{8\}$` | |
| 231 | + |
| 232 | +#### 匹配中国联通 |
| 233 | + |
| 234 | +| 命令 | 正则表达式 | |
| 235 | +| --- | --- | |
| 236 | +| GNU ERE | `^(+?86)?145[0-9]{8}$` | |
| 237 | +| GNU BRE | `^\(+\?86\)\?145[0-9]\{8\}$` | |
| 238 | + |
| 239 | +#### 匹配中国电信 |
| 240 | + |
| 241 | +| 命令 | 正则表达式 | |
| 242 | +| --- | --- | |
| 243 | +| GNU ERE | `^(+?86)?149[0-9]{8}$` | |
| 244 | +| GNU BRE | `^\(+\?86\)\?149[0-9]\{8\}$` | |
| 245 | + |
| 246 | + |
| 247 | +## 更新日志 |
| 248 | + |
| 249 | +#### 2019.01.12 |
| 250 | +- 发布首个兼容 GNU BRE 和 GNU ERE 的版本。 |
| 251 | + |
| 252 | + |
| 253 | +[PCRE]: https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions |
| 254 | + |
| 255 | +[POSIX]: https://en.wikipedia.org/wiki/Regular_expression#Standards |
| 256 | + |
| 257 | +[维基百科 - Regular expression]: https://en.wikipedia.org/wiki/Regular_expression |
| 258 | + |
0 commit comments