正则表达式 – 奇葩学习

正则表达式,奇葩学习历程,匹配电话、段落和邮箱

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

下面的所有实例请在 RegExr 中测试

匹配电话

如果电话是这样的 139-0702-1234 十一位电话,可以这样匹配:

[0-9]{3}\W[0-9]{4}\W[0-9]{4}

或者

\d{3}\W\d{4}\W\d{4}
  1. 一个中括号只能匹配一个字符,
  2. 0-9 匹配所有数字
  3. 花(大)括号里面的数字意味着其前方的元字符匹配次数,有以下一种写法
    • {n,m} 匹配 n 到 m 次
    • {n,} 至少 n 次
  4. \W 匹配一个数字, 字母, 下划线之外的字符, 小写 w 匹配数字字母下划线.
  5. \d 和 [0-9] 等效, 但是灵活度不如 [0-9] 高.

匹配段落

匹配限定字符开头, 结尾的段落.(打开 multiline 选项)

  1. 匹配 hello 开头, hello 结尾的字符,其实就是匹配 hello 本身
^hello$

^ 和 $ 一般被认为是以什么开头和结尾的边界词, 其实不如理解为匹配这两个字符圈定的内容

^hello.{0,10}word$

上面的正则, 则匹配一个段落中 hello 中间十个以内的字符 word, 如果段落不以 hello 开头或者 word 结尾, 则匹配失败.
一个段落, 可以理解为一个回车之内的文字

匹配邮箱

这个就比较复杂了, 我们在此默认匹配如下类型的邮箱

1@cyleft.com
1-a@cyleft.com
1-a-d@cyleft.com

admin@q-q.com
admin@made-in-china.com

admin@a.a.com

正则:

^[a-zA-Z0-9-]{1,10}@([a-zA-Z0-9-]{1,13}\.)+[a-zA-Z0-9]+$

这里分块解释一下:
1. ^ ... $ 设置开头结尾
2. [a-zA-Z0-9-]{1,10} 匹配大小写字母,数字,横线 - 1 到 10 次.
3. @ 匹配@字符
4. ([a-zA-Z0-9-]{1,13}.)+ 匹配小括号里面的整体(多级域名)一次或多次
+ [a-zA-Z0-9-]{1,13} 一到十三次
+ . 匹配字符 ., 斜线用来转义
+ + 代表一次或多次
5. [a-zA-Z0-9]+ 匹配一次或多次, 比如com cn 等根域名

这里有一个问题, 域名可以用 -, 但是不能以横线开头结尾, 所以
^[a-zA-Z0-9-]{1,10}@([a-zA-Z0-9][a-zA-Z0-9-]{1,13}\.)+[a-zA-Z0-9]+$
但是还是排除不了 - 结尾的形式, 就学到这里吧, 长期等正确答案!

式微式微胡不归.