正则表达式快速入门一:正则表达式(regex)基本语法及概念
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)基本语法及概念的更多相关文章
- C#正则表达式快速入门
作者将自己在学习正则表达式中的心得和笔记作了个总结性文章,希望对初学C#正则表达式的读者有帮助. [内容] 什么是正则表达式 涉及的基本的类 正则表达式基础知识 构建表达式基本方法 编写一个检验程序 ...
- Vue 1-- ES6 快速入门、vue的基本语法、vue应用示例,vue基础语法
一.ES6快速入门 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 2 ...
- c语言快速入门2
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...
- vue 快速入门 系列 —— vue loader 下
其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...
- 快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)
1. 快速入门python,python基本语法 Python使用缩进(tab或者空格)来组织代码,而不是像其 他语言比如R.C++.Java和Perl那样用大括号.考虑使用for循 环来实现排序算法 ...
- Linux快速入门02-文件系统管理
继续进入Linux文件系统的学习,加油,早日突破MS压在自己身上的那道束缚. Linux系列文章 快速入门系列--Linux--01基础概念 快速入门系列--Linux--02文件系统管理 快速入门系 ...
- git 快速入门及常用命令
身为技术人员,都知道Git是干嘛的.从服务端角度它是代码仓库,可以多人协作.版本控制.高效处理大型或小型项目所有内容:从客户端讲,它能够方便管理本地分支.且与服务端代码的同步,从拉取.合并.提交等等管 ...
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
- 转:C++ Boost/tr1 Regex(正则表达式)快速指南
C++ Boost/tr1 Regex(正则表达式)快速指南 正则表达式自Boost 1.18推出,目前已经成为C++11(tr1)的标准部分. 本文以Boost 1.39正则表达式为基础,应该广泛适 ...
- shell脚本快速入门----正则表达式
一. "." 符号 (一个英文句号) 用于匹配换行符之外的任意一个字符 如 root 可用r..t来匹配 二. "*"符号 重复匹配前一个字符 如ab abc ...
随机推荐
- Nodejs 应用编译构建提速建议
编译构建的整体过程 拉取编译镜像 拉取缓存镜像 拉取项目源码 挂载缓存目录 执行编译命令(用户自定义) 持久化缓存 上传编译镜像 为什么在本地构建就快, 但编译机上很慢 在编辑机上每次的构建环境都是全 ...
- 代码随想录算法训练营Day21 二叉树
代码随想录算法训练营 代码随想录算法训练营Day21 二叉树| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 题目链接:5 ...
- 解决github无法打开问题
在国内访问国外服务器(如github)会有卡顿.无法加载等问题,提供两种解决方案: 1.查看github的IP地址并修改Hosts windows键+R,打开cmd(或windows键+X,打开Win ...
- 天下苦 Spring 久矣,Solon v2.3.3 发布
Solon 是什么框架? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(全球第二级别的生态).与其他框架相比,它解决了两个重要的痛点:启动慢,费资源. 解决痛点? ...
- WPF 入门笔记 - 04 - 数据绑定
慢慢来,谁还没有一个努力的过程. --网易云音乐 概述 数据绑定概述 (WPF .NET) 什么是数据绑定? 数据绑定(Data Binding)是WPF一种强大的机制,用于在应用程序的各个部分之间建 ...
- JDBC详解(韩顺平教程)
JDBC 一.原理示意图 二.前提步骤 IDEA导入MySQL的jdbc驱动,并操作数据库 - 打点 - 博客园 (cnblogs.com) 三.JDBC编写步骤: 用法1: package Hsp. ...
- React学习时,outlet 路由配置 (prop传参处理,跳转的实现,父子数据共享)
index.js import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App' ...
- 如何让一句话木马绕过waf ?
一.什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. ...
- Lamada List 去重及其它操作示例
import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util. ...
- SketchUp Pro 2023 下载和安装教程
SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...