正则表达式

作者: 木子李_af14 | 来源:发表于2017-08-01 16:54 被阅读134次

参考文档:
http://blog.csdn.net/spch2008/article/details/50574059
http://www.runoob.com/java/java-regular-expressions.html

现有一个无敌坑的正则表达式如下:

 /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$|^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$/

只记得正则表达式看过好几次,但是由于使用的太少,导致看一次忘一次,所以这一次,通过这个对我来说难度上天的表达式,简单的记录一下学习过程。

这个正则表达式,本来是项目中用来校验输入的支付宝账号格式用的,因为支付宝账号有两种:手机号和邮箱。

分析正则

  1. 开头和结尾的 / 符号
    这个符号很可能是前端从哪个js或者字符串中拷贝出来,在这里应该不带任何意义。应该去掉。

  2. 通过 | 竖线来拆分正则

原正则:
^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$|^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$

拆分后:
^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$      //匹配邮箱
|
^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$   //匹配手机号
  1. 单个击破
    3.1 邮箱的正则
^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$

^ 表示以...开头。 这里表示以(\w-*\.*)+开头。

(\w-*\.*)+ 表示一个或多个(字符串+零或多个减号+零或多个点)
满足(\w-*\.*)+的字符串有:
service-----service----xxx......
service-----service----xxx
service-----
123service-----

@ 表示邮箱的@符号

(\w-?)+ 表示一个或多个(字符串+零或一个减号)

(\.\w{2,})+ 表示一个或多个(点+至少两个字符)

$ 表示(在这)必须以(\.\w{2,})+结尾

3.2 手机号的正则

^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$

^ 表示以...开头。 这里表示以(13或15或18+一个数字)开头。

(?:13\d|15\d|18\d) 表示(13或15或18+一个数字),关于?:请看特殊规则

-? 表示零个或一个减号(这点,作为手机号的正则就让人无法理解)

\d{5} 表示5个数字

(\d{3}|\*{3}) 表示3个数字或三个*(脱敏),这个脱敏规则也很奇怪

$ 表示(在这)必须以3个数字或三个*结尾

特殊规则

  1. ^ 和 $
  ^符号表示以什么开头,$符号表示以什么结尾
  举例:
  ^\d+$  只能匹配数字开口,数字结尾的表达式;
  \d+$   只要结尾是数字,就可以匹配;
  ^\d+   只要开头是数字,就可以匹配;
  1. ?:
这与反向引用有关,先简单介绍一下什么是后向引用。
一个稍复杂的正则表达式,可能由多个()组成,()中有各种简单的正则表达式,举一个例子:
(\d+),(\w),(\d+)   //表达式一: 三个可被捕获的表达式
(?:\d+),(?:\w),(\d+)   //表达式二:一个可被捕获的表达式

如表达式一,三个括号可以理解成三个变量,用\1 \2 \3依次表示(\d+) 和 (\w) 和 (\d+)。

如果我要通过grep的正则来搜索:
grep -P "(\d+),(\w),\1," --color log.txt
通过\1可以获取(\d+)
  1. 贪婪和懒惰 ?
    正则表达式,默认情况下都是“贪婪”,当"?"紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“懒惰”。
    “懒惰”模式匹配搜索到的、尽可能短的字符串,而默认的“贪婪”模式匹配搜索到的、尽可能长的字符串。举例说明:
表达式 含义
*? 重复零次或多次,但尽可能少
+? 重复一次或多次,但尽可能少
?? 重复0次或1次,但尽可能少
{n}? 重复n次,但尽可能少
{n,}? 重复至少n次,但尽可能少
{n,m}? 重复n到m次,但尽可能少

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

    本文标题:正则表达式

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