美文网首页
正则表达式学习-语法篇

正则表达式学习-语法篇

作者: firekcc | 来源:发表于2017-04-06 22:38 被阅读0次

定义

  • Regular Expression使用单个字符串来描述、匹配一系列符合 某个句法规则的字符串
  • 说简单了就是按照某种规则去匹配符合条件的字符串

可视化编辑工具

工欲善其事,必先利其器,为了更好理解正则表达式语法,可以使用一款正则表达式可视化编辑工具,比较受欢迎的有Regulex Rubular Pyregex Regexper 这些,它们都是在github上开源的工具,本人更喜欢简洁风格的Regexper。


语法

[\w!#$%&'+/=?^_{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_{|}~-]+)@(?:\w?\.)+[\w](?:[\w-]*[\w])?

不要看到一连串乱七八糟的正则表达式就失去征服它的动力,比如上面校验email地址的正则表达式,看起来是不是很迷惑呢?再复杂的东西都有其简单的构造元素,接下来看看正则表达式都有哪些基本语法吧

  • 修饰符

当我们不添加修饰符时,默认一般都是false。

  • g:global全文搜索,不添加 , 搜索到第一个匹配停止
  • i:ignore case 忽略大小写,默认大小写敏感
  • m:multiple lines 多行搜索
  • 元字符
    • 原义文本字符
      eg:abc,123
    • 元字符
      eg: \b

元字符是在正则表达式中有特殊含义的非字母字符

 * + ? $ ^ . | \ ( ) { } [ ]
字符 含义
\t 水平制表符
\v 垂直制表符
\n 换行符
\r 回车符
\0 空字符
\f 换页符
\cX 与X对应的控制字符(Ctrl + X)
  • 字符类
  • 一般情况下正则表达式一个字符对应字符串一个字符
  • 我们可以使用元字符[]来构建一个简单的类
  • 所谓类是指符合某些特性的对象,一个泛指,而不是特指某个字符
  • 表达式[abc]把字符a或b或c归为一类,表达式可以匹配这类的字符
  • 字符类取反
  • 使用元字符^创建 反向类/负向类
  • 反向类的意思是不属于某类的内容
  • 表达式 [^abc] 表示不是字符a或b或c的内容
  • 范围类

使用字符类匹配数字 ==[0123456789]==

  • 我们可以使用[a-z]来链接两个字符表示从a到z的任意字符
  • 这是个闭区间,也就是包含a和z本身
  • 在[ ]组成的类内部是可以连写的 ==[a-zA-Z]==
  • 预定义类

正则表达式提供 ==预定义类== 来匹配常见的字符类

字符 等价类 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白字符
\S [^\t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符
\W [^a-zA-Z_0-9] 非单词字符

匹配一个 ==ab+数字+任意字符== 的字符串

ab[0-9][^\r\n]  
ab\d.
  • 边界

正则表达式提供了几个常用的边界匹配字符

字符 含义
^ 以xxx开始
$ 以xxx结束
\b 单词边界
\B 非单词边界
  • 量词

我们希望匹配一个连续出现 ==20次== 数字的字符串
\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d
\d{20}

字符 含义
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次
\d{20}\w\d?\w+\d*\d{3}\w{3,5}\d{3,}\d{0,9}
  • 贪婪模式与非贪婪模式
  • 贪婪模式
  '12345678'.replace(/\d{3,6}/g,'X')
  • 非贪婪模式
 让正则表达式尽可能少的匹配,也就是说一旦成功匹 配不再继续尝试就是非贪婪模式
 做法很简单,在量词后加上?即可

 '123456789'.match(/\d{3,5}?/g)
  • 分组

匹配字符串Byron连续出现3次的场景
ByronByronByron
error:Byron{3}
使用( )可以达到分组的功能,使量词作用于分组
success:(Byron){3}

'a1b2c3d4'.replace(/[a-z]\d{3}/,'x')

使用 | 可以达到或的效果
'ByronCasper'.replace(/Byron|Casper/g,'X')
'ByronsperByrCasper'.replace(/Byr(on|Ca)sper/g,'X')

  • 反向引用

2016-12-26=>12/26/2016

 '2016-12-26'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2$3$1')
  • 忽略分组

不需要捕获某些分组,只需要在分组内加上?:就可以了

 ==(?:Byron).(ok)==

相关优质资源

Java 正则表达式(精华)
常用正则表达式
知道这20个正则表达式,能让你少写1,000行代码
30分钟玩转「正则表达式」

相关文章

  • 无标题文章

    了解正则表达式语法 了解正则表达式语法

  • 爬虫之道-正则表达式二

    说完正则表达式的两个学习模块之一:re模块的运用,剩下的就是另一个:正则表达式语法,这个正则表达式语法呀,不仅仅使...

  • 正则表达式学习-语法篇

    定义 Regular Expression使用单个字符串来描述、匹配一系列符合 某个句法规则的字符串 说简单了就是...

  • Java 正则表达式

    参考文章:正则表达式30分钟入门教程 语法:正则表达式语法手册 正则表达式在Java和其他语法中的区别 在其他语言...

  • sql教程6分组、转义与模糊匹配、正则表达式

    GROUP BY 语法 实例 转义与模糊匹配 语法 实例 正则表达式 语法 实例

  • 正则表达式

    正则表达式的使用 1. 正则表达式语法 1.1. 正则表达式,是一个单独的技术! 正则表达式,有独立的语法结构,区...

  • java正则表达式

    Java正则表达式语法

  • Python帮你找东西——Cheat Sheet

    上一篇文章给大家介绍了正则表达式的基础概念,字符和语法,展示了正则表达式常用的功能。但是正则表达式虽然很强大,但也...

  • 正则 RegExp对象

    5.24正则学习 正则表达式语法: regexp对象 验证:var bool=reg.test(str)str符合...

  • JavaScript正则表达式

    JavaScript的正则表达式语法是Perl15的正则表达式语法的大型子集。 正则表达式的创建 像创建对象一样,...

网友评论

      本文标题:正则表达式学习-语法篇

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