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. logging 模块因权限问题写入日志失败

    哈喽大家好,我是咸鱼 今天跟大家分享一个使用 Python 的 logging 模块写入日志文件时遇到的权限问题,不知道你们有没有遇到过 1.案例现象 今天上班的时候手机短信收到了 zabbix 告警 ...

  2. 【python基础】if语句-语法格式

    if语句-语法格式 简单理解if语句之后,我们的if语句语法格式有多种,选择使用哪种取决于要测试的条件数 1.if结构 最简单的if语句只有一个条件测试和一个代码块 其语法格式: 假设想要指导一个学员 ...

  3. 大家听过Java applet吗?为什么不再流行了

    前言 Java applet 不知道有同学听过吗?我也只是听过,并没有使用过.我特意去了解了一下它,本文就对 Java applet 进行简单介绍,说说它的辉煌与衰败.仅此而已,现在已经没人使用 Ja ...

  4. 【QCustomPlot】下载

    说明 使用 QCustomPlot 绘图库辅助开发时整理的学习笔记.同系列文章目录可见 <绘图库 QCustomPlot 学习笔记>目录.本篇介绍 QCustomPlot 的下载. 目录 ...

  5. 使用containerd从0搭建k8s(kubernetes)集群

    准备环境 准备两台服务器节点,如果需要安装虚拟机,可以参考<wmware和centos安装过程> 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 mas ...

  6. 「学习笔记」Garsia-Wachs 算法

    前言 本文的资料和图片均来自 \(\texttt{OI-Wiki}\). 引入 题目描述 在一个操场上摆放着一排 \(N\) 堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的 \(2\) 堆 ...

  7. 一个支持WinForms换肤的开源组件

    推荐一个一键换肤的WinForms皮肤组件. 项目简介 这是一个支持自定义WinForms窗口.控件颜色.禁用状态.动画效果的皮肤组件. 支持的组件有:多选框.分割线.按钮.文本框.单选按钮.输入框. ...

  8. 2023-06-24:给你一根长度为 n 的绳子, 请把绳子剪成整数长度的 m 段, m、n都是整数,n > 1并且m > 1, 每段绳子的长度记为 k[0],k[1]...k[m - 1]。 请问

    2023-06-24:给你一根长度为 n 的绳子, 请把绳子剪成整数长度的 m 段, m.n都是整数,n > 1并且m > 1, 每段绳子的长度记为 k[0],k[1]...k[m - 1 ...

  9. Java String、StringBuilder、StringBuffer类

    1.String类 创建字符串对象后,字符串对象不可以发生改变,并且这个字符串对象存储在方法区中的字符串常量池中. 即使想改变字符串对象,那么也只是在字符串常量池中重新创建了一个字符串对象而已. 2. ...

  10. 1.1 熟悉x64dbg调试器

    x64dbg 是一款开源.免费.功能强大的动态反汇编调试器,它能够在Windows平台上进行应用程序的反汇编.调试和分析工作.与传统的调试器如Ollydbg相比,x64dbg调试器的出现填补了Olly ...