美文网首页
Regular Expression

Regular Expression

作者: ienos | 来源:发表于2020-04-26 11:54 被阅读0次

一、在 iOS 中使用正则表达式

let predicate =  NSPredicate(format: "SELF MATCHES %@" ,predicateStr)
let evaluate = predicate.evaluate(with: matchingStr)

二、Online Tool

LINK

三、匹配字符

Special Symbol

以下所有字符要匹配原字符,前面加 \

Symbol Function Example ([RULE STRING] -> [MATCH STRING] = RESULT[TRUE OR FAlSE])
() 表示一个字符串组合
* 前面子表达式匹配 >= 0
+ 前面子表达式匹配 >=1
. 除换行 \n 之外的任何单字符
[] 单个匹配,定义匹配的字符范围
? 同 *,或指定一个非贪婪限定符
\ 转义字符
{n} n >= 0, 确定匹配 n 次
{n, } n >= 0, 最少匹配 n 次
{n, m} n >= 0, n <= m,最少匹配 n 且最多匹配 m 次
| 指明两项之间的一个选择

Location Symbol

Symbol Function Example ([RULE STRING] -> [MATCH STRING] = RESULT[TRUE OR FAlSE])
^ 字符串的开始字符位置
$ 字符串的结束字符位置
\b 单词边界匹配 \bter -> "Chapter" = false, ter\b -> "Chapter" = true
\B 无单词边界匹配 \Bte -> "Chapter" = true

匹配特殊字符

Symbol Function Example (Symbol)
\d 同 [0-9],匹配一个数字字符 [0-9]
\D 同 [^0-9] 匹配一个非数字字符 [^0-9]
\f 匹配一个换页符 \f
\n 匹配一个换行符 \n
\r 匹配一个回车符 \r
\S 匹配任何空白字符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\w 同 [A-Za-00-9_],匹配字母、数字、下划线
\W 同 [^A-Za-00-9_],匹配非「字母、数字、下划线」
\xn 同 [^A-Za-00-9_],匹配非「字母、数字、下划线」
\W 同 [^A-Za-00-9_],匹配非「字母、数字、下划线」
\xn 匹配 n,n 为十六进制转移值,n 为两个数字长,\x04 or \x67
\num 匹配 num,num 是一个
\n
\nm
\nml
\un 匹配 n,其中 n 是一个用 4 个 16 进制数字表示 Unicode 字符

查询,但是不消耗字符,pattern 可以 使用 | 来组合各个部分

Symbol Function Example ([RULE STRING] -> [MATCH STRING] = RESULT[TRUE OR FAlSE])
(?:pattern) 匹配 pattern industr(?:y|ies) -> industry -> true
(?=pattern) 正向匹配 pattern Windows(?=95|98|2000) -> Windows2000 -> true
(?!pattern) 正向不匹配 pattern Windows(?!95|98|2000) -> Windows3.1 -> true
(?<=pattern) 反向匹配 pattern (?<=95|98|2000)Windows -> 2000Windows -> true
(?<!pattern) 反向不匹配 pattern (?<!95|98|2000)Windows -> 3.1Windows -> true

字符集匹配

Symbol Function Example ([RULE STRING] -> [MATCH STRING] = RESULT[TRUE OR FAlSE])
(x|y) 匹配 x or y industr(?:y|ies) -> industry -> true
[xyz] 匹配 x y z
[^xyz] 未包含 x y z
[a-z] 匹配 a 到 z 的小写字符
[^a-z] 反向不匹配 pattern

四、分析一下下面的正则表达式

1. Email 地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

拆分如下:

\w+ + ([-+.]\w+)* + @ + \w+ + ([-.]\w+)* + . + \w+ + ([-.]\w+)*

后面带有星号的表示可选匹配

\w+ 表示 [数字、字母、下划线] 其中一种类型字符串至少匹配一次

([-+.]\w+)* 表示 .\w++\w+-\w+ 这样的组合匹配 >= 0 次

2. 域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3. InternetURL:
^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

我们将上面的正则进行拆解分析,我们将上面分为四个部分:

举个🌰,可以正确匹配的字符串 http://www.baidu.com/component

第一项: http://
~~ http://

第二项: ([\w-]+.)+
~~ 匹配多个类似: www.baidu.

可以理解为 () 中是一个组合,是一个由 [数字、字母、下划线、减号] 其中一种类型字符串,且>1次匹配,和一个 . 的组合。类似匹配如: w_w.___.123.

第三项: [\w-]+
~~ 匹配 com

[数字、字母、下划线、减号] 其中一种类型字符串至少匹配一次

第四项: (/[\w-./?%&=]*)?
~~ 匹配 /component

/ + [数字、字母、下划线、-、.、?、%、&、=] 大于一次匹配

由于外面还加了一个()?说明匹配 >=0 次,字符串匹配可选

4. 手机号码:
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

拆分如下:13[0-9] | 14[5|7] | 15[0|1|2|3|5|6|7|8|9] | 18[0|1|2|3|5|6|7|8|9] + 8 个[数字]

5. 电话号码
"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX
^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

6. 国内电话号码(0511-4405222、021-87888822):
\d{3}-\d{8}|\d{4}-\d{7}

7. 身份证号(15位、18位数字):
^\d{15}|\d{18}$

< 身份证号码的详细规则 >

  • 前 6 位对应省市区
  • 7 ~14 : 出生月日
  • 15 ~ 1 7 : 顺序码
  • 17 位表示性别,男性 - 奇数,女性 - 偶数
  • 18 位表示校验码

< 校验码计算 >

ai —— 身份证第 i 位数字
Wi —— 身份证第 i 位对应的加权因子

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
ai a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

假设身份证第 n 位的值为 ai

image.png

根据 y 的结果可以找到对应 a18 的值,校验是否与身份证号码第18位相匹配,匹配则说明身份证号码正确 ✅

y 0 1 2 3 4 5 6 7 8 9 10
a18 1 0 X 9 8 7 6 5 4 3 2

a18 有些时候为 X,代表罗马数字 10

8. 帐号是否合法:
字母开头,允许5-16字节,允许字母数字下划线
^[a-zA-Z][a-zA-Z0-9_]{4,15}$

9. 密码
以字母开头,长度在6~18之间,只能包含字母、数字和下划线
^[a-zA-Z]\w{5,17}$

10. 强密码
必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

11. 日期格式:
^\d{4}-\d{1,2}-\d{1,2}

12. 一年的12个月(01~09和1~12):
^(0?[1-9]|1[0-2])$

13. 一个月的31天(01~09和1~31):
^((0?[1-9])|((1|2)[0-9])|30|31)$

相关文章

  • 正则表达式 re包 2018-10-02

    参考官网:Regular expression operations re: regular expression...

  • 10. Regular Expression Matching

    最怕regular Expression的题了。出现regular expression立刻想到几点:notes:...

  • AX 使用.Net的Regular Expression

    AX本身不支持regular expression,但可以使用.Net 的Regular Expression。 ...

  • Regular Expression

    校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的...

  • Regular Expression

    I spend 3 hours to learn about regular expression. The le...

  • Regular Expression

    \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么?\d:匹配数字\w :...

  • Regular expression

    定义 来自维基百科正则表达式。在理论计算机科学和形式语言理论中,正则表达式是定义搜索模式的一串字符。这种模式通常用...

  • Regular Expression

    1 正则常规用法 ①几个常用方法 正则调用: test()<用于检测字符是否匹配某个模式,有则返回true,否则返...

  • Regular Expression

    一、在 iOS 中使用正则表达式 二、Online Tool LINK 三、匹配字符 Special Symbol...

  • Regular Expression

    The regular expression written by me in github. Regular e...

网友评论

      本文标题:Regular Expression

      本文链接:https://www.haomeiwen.com/subject/efttwhtx.html