Regex quickstart :正则表达式快速入门

author: wclsn


reference quick start

如果想要了解正则表达式的基本概念且英文ok的话,完全可以从我上面所附网站的quickstart看起。如果仅仅只是想快速入门并用起来,那么在看完quickstart 之后,可以看这个网站上对应编程语言中正则表达式的使用;如果想要对于quickstart中的语法特性做进一步的学习,那么可以看这个网站上相应语法 topic的tutorial

这篇随笔主要是写我在看完 上面所附quick start 之后的一些想法, 对于上面所附的教程中所附的概念做了一些组织

Intro

正则表达式:regular expression 常常简写为regex,是用于表示text pattern的表达式(一组字符串), 主要用于在目标文本中实现高效的文本匹配

Regular Expression Engine: 一个 regex engine 是能够处理正则表达式的代称,它能够在给定字符串中匹配特定的pattern(match the pattern to the given string)。通常而言 engine是一些更大的应用的一部分,并且一般你不直接访问engine

就正如软件世界的许多软件一样,不同的正则表达式 engine并不一定是彼此兼容的。某个engine的语法(syntax)或者行为(behavior) 被称为 regex flavor。有许多 regex flavor: 比如 python js perl php posix等等

匹配:最简单的匹配即直接使用 literal text(字对字的匹配),这也是一种最为简单的正则表达式。但这种匹配不够灵活,冗余度也过高,因此需要对字符串的结构进行抽象,引入特殊的运算符,来实现更有效的匹配。

字符层级的抽象

字符串的基本组成单位是字母(Literal Characters),正则表达式匹配的基础也是Literal characters, 比如说 a 会匹配字符串中的a。为了添加相应的运算符,正则表达式中有12个字符(metacharacters)具有特殊的含义,若要使用它们的原义(as a literal character)需要经过转义

为了扩大符号匹配的范围(enlarge the character class),正则表达式提供了对于 non-printable characters(例如tab 回车 esc等) 以及unicode 字符、十六进制字符集的支持

同时为了实现精准的字符匹配,正则表达式支持 Character Classes,即对于待匹配字符提供一个备选的集合 例如gr[A-Za-z]y 或者gr[ae]y。 针对这个集合又定义了一些运算(如^)

对于常见的字符集(如数字集,或者字母数字集等),regex提供了相应的简写(shorthand character class) 如\d 表示数字, \w表示字母数字字符加下划线, \s匹配whitespace character

同时 regex还提供了一种特殊的字符 . ,Dot match almost any character, 当然应该尽量少使用 .  在一般情况下字符集或者非字符集(negated character class)更快也更精确

由字符扩展至字符串

Repetition: * 算符或者 + 算法会重复匹配前一个字符, 结合character class使用可以用于匹配同类型的字符组合(如邮件 网址等), 同时还可以用 {} 指定重复匹配的次数, 比如 []+{3} 或者 []+{2, 4} ; 将 dot 和 + 结合起来可以实现 greedy or lazy repetition

Grouping and Capturing: 使用圆括号将许多字符变成一个匹配对象,将其作为一个整体参与匹配。同时我们也可以对于group 添加量词 (如?)

grouping will create capturing groups : 因此我们可以复用 capturing groups 中的内容。如用反向引用(backreference)

在由多个group 时,增加可读性的方法往往是对于group进行命名

很多时候,我们并不需要group的匹配结果,而是需要使用group是否匹配作为匹配的条件。Lookaround是一种特殊的group,包括Lookahead and lookbehind, 例如 q(?=u) 以及 (?<=a)bc

Alternation:在匹配字符串的时候 正则表达式还提供了|运算符, 如 cat|dog 需要注意的是, |具有最低的运算优先级

匹配位置的指定

Anchor:这类字符对于匹配的位置进行锚定(比如 ^ 和 $) 以及 \b 与 \B

表达式的可读性

为了表达式的可读性,在许多应用中提供了 free-spacing or ignore-whitespace or comment选项。 这样 regex engine 就会忽略表达式中的空格以及换行符, 同时# 提供了单行注释的功能。

在上述功能的加持下正则表达式的可读性以及可维护性会有显著的提升

至于具体的语法细节请参阅 所附reference网址, 在写作过程中难免会有所纰漏,如果有什么错误请及时联系我修改

正则表达式快速入门一:正则表达式(regex)基本语法及概念的更多相关文章

  1. C#正则表达式快速入门

    作者将自己在学习正则表达式中的心得和笔记作了个总结性文章,希望对初学C#正则表达式的读者有帮助. [内容] 什么是正则表达式 涉及的基本的类 正则表达式基础知识 构建表达式基本方法 编写一个检验程序 ...

  2. Vue 1-- ES6 快速入门、vue的基本语法、vue应用示例,vue基础语法

    一.ES6快速入门 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 2 ...

  3. c语言快速入门2

    如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...

  4. vue 快速入门 系列 —— vue loader 下

    其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...

  5. 快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)

    1. 快速入门python,python基本语法 Python使用缩进(tab或者空格)来组织代码,而不是像其 他语言比如R.C++.Java和Perl那样用大括号.考虑使用for循 环来实现排序算法 ...

  6. Linux快速入门02-文件系统管理

    继续进入Linux文件系统的学习,加油,早日突破MS压在自己身上的那道束缚. Linux系列文章 快速入门系列--Linux--01基础概念 快速入门系列--Linux--02文件系统管理 快速入门系 ...

  7. git 快速入门及常用命令

    身为技术人员,都知道Git是干嘛的.从服务端角度它是代码仓库,可以多人协作.版本控制.高效处理大型或小型项目所有内容:从客户端讲,它能够方便管理本地分支.且与服务端代码的同步,从拉取.合并.提交等等管 ...

  8. [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门

    [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...

  9. 转:C++ Boost/tr1 Regex(正则表达式)快速指南

    C++ Boost/tr1 Regex(正则表达式)快速指南 正则表达式自Boost 1.18推出,目前已经成为C++11(tr1)的标准部分. 本文以Boost 1.39正则表达式为基础,应该广泛适 ...

  10. shell脚本快速入门----正则表达式

    一. "." 符号 (一个英文句号) 用于匹配换行符之外的任意一个字符 如 root 可用r..t来匹配 二. "*"符号 重复匹配前一个字符 如ab abc ...

随机推荐

  1. Redash 可视化BI系统部署安装及简单使用

    这篇文章主要为介绍一下Redash的使用和安装 概览 Redash 主要使用的语言为 Python 和 TypeScript 这个安装主要是基于Docker 来安装的,官网教程基本没有不是基于Dock ...

  2. 前端开发如何更好的避免样式冲突?级联层(CSS@layer)

    作者:vivo 互联网前端团队 - Zhang Jiqi 本文主要讲述了CSS中的级联层(CSS@layer),讨论了级联以及级联层的创建.嵌套.排序和浏览器支持情况.级联层可以用于避免样式冲突,提高 ...

  3. iOS网络数据指标收集

    在平时开发中有时候需要收集网络不同阶段性能数据来分析网络情况,下面总结了2种收集方式. 1.通过NSURLSession提供的代理方法收集 2.通过NSURLProtocol做统一网络请求拦截收集 通 ...

  4. OpenOffice4.1.6 linux安装/卸载教程

    以下是centos的安装方法 1.先安装并配置好jdk 2.拷贝 把Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz拷贝到自己 ...

  5. C++面试八股文:static和const的关键字有哪些用法?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第7面: 面试官:C++中,static和const的关键字有哪些用法? 二师兄:satic关键字主要用在以下三个方面:1.用在全局作用域,修饰的变量 ...

  6. Kafka的系统架构和API开发

    系统架构 主题topic和分区partition topic Kafka中存储数据的逻辑分类:你可以理解为数据库中"表"的概念:比如,将app端日志.微信小程序端日志.业务库订单表 ...

  7. 开源 API 网关-访问策略(二)

    在上篇文章API网关:开源 API 网关-访问策略(一) 中,我们简单演示了如何在IP维度中对请求路径设置黑白名单,以此来限制客户端请求的权限和范围. 此外,Apinto网关为客户端提供了一种统一的. ...

  8. .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求

    关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法 安装引用Titanium.Web.Proxy NuGet直接获取Titanium.Web.Proxy 使用 配置 ...

  9. HTML5新特性之Web Storage

    Web Storage是HTML5新增的特性,能够在本地浏览器存储数据,对数据的操作很方便,最大能够存储5M. Web Storage有两种类型: SessionStorage 和 LocalStor ...

  10. 谁在以太坊区块链上循环交易?TuGraph+Kafka的0元流图解决方案

    都在说数据已经成为新时代的生产资料. 但随着大数据和人工智能等技术的发展,即便人们都知道数据的价值日益凸显,却无法凭借一己之力获取和分析如此大规模的数据. 要想富,先修路.要想利用新时代的数据致富,也 ...