正则表达基础学习(一)

0x00写在前面:

不管是PHP、Python还是JAVA等编程语言,在使用字符串匹配过程中,正则表达匹配往往是首选。下面是个人总结的关于正则表达的基本知识。初学往往只是基础,关键在于实践。



0x01正则表达式 - 概述:

正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。

正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。

0x02正则表达式 - 基本匹配:

正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。

正则表达式是大小写敏感的

0x03正则表达式 - 元字符:

正则表达式主要依赖于元字符。 元字符不代表他们本身的字面意思,他们都有特殊的含义。

一些元字符写在方括号中的时候有一些特殊的意思。

元字符 描述
. 句号匹配任意单个字符除了换行符。
[ ] 字符种类。匹配方括号内的任意字符。
[^ ] 否定的字符种类。匹配除了方括号里的任意字符
* 匹配>=0个重复的在*号之前的字符。
+ 匹配>=1个重复的+号前的字符。
? 标记?之前的字符为可选.
{n,m} 匹配num个大括号之间的字符 (n <= num <= m).
(xyz) 字符集,匹配与 xyz 完全相等的字符串.
| 或运算符,匹配符号前或后的字符.
\ 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
^ 从开始行开始匹配.
$ 从末端开始匹配.

详解:

  • 点运算符“.”:

“.”是元字符中最简单的例子。 “.”匹配任意单个字符,但不匹配换行符。

例如:

.ar => The car parked in the garage.//表达式".ar"匹配一个任意字符后面跟着是a和r的字符串。
  • 字符集

字符集也叫做字符类。 方括号用来指定一个字符集。

在方括号中使用连字符来指定字符集的范围。 在方括号中的字符集不关心顺序。例如:表达式[Tt]he 匹配 the 和 The。

方括号的句号就表示句号。 表达式 ar[.] 匹配 ar.字符串

ar[.] => A garage is a good place to park a car.
  1. 否定字符集

一般来说 ^ 表示一个字符串的开头,但它用在一个方括号的开头的时候,它表示这个字符集是否定的。 例如:表达式[^c]ar 匹配一个后面跟着ar的除了c的任意字符。

[^c]ar=> The car parked in the garage.
  • 重复次数

后面跟着元字符 +,* or ? 的,用来指定匹配子模式的次数。这些元字符在不同的情况下有着不同的意思。

“*”号:“*”号匹配在“*”之前的字符出现大于等于0次。例如:表达式 “a*” 匹配0或更多个以a开头的字符。

表达式[a-z]* 匹配一个行中所有以小写字母开头的字符串。

[a-z]*=> The car parked in the garage #21."*"字符和"."字符搭配可以匹配所有的字符".*"。

*号表示匹配空格的符号\s连起来用,如表达式\s*cat\s*匹配0或更多个空格开头和0或更多个空格结尾的cat字符串。

“+”号匹配“+”号之前的字符出现 >=1 次。 例如:表达式c.+t 匹配以首字母c开头以t结尾,中间跟着至少一个字符的字符串。

c.+t" => The fat cat sat on the mat.

“?”号:在正则表达式中元字符“?”标记在符号前面的字符为可选,即出现 0 或 1 次。 例如:表达式 [T]?he 匹配字符串 he 和 The。

[T]he=> The car is parked in the garage.

[T]?he=> The car is parked in the garage.
  • “{}”号:在正则表达式中 {} 是一个量词,常用来一个或一组字符可以重复出现的次数。例如:表达式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字。
[0-9]{2,3}=> The number was 9.9997 but we rounded it off to 10.0.

我们可以省略第二个参数。 例如,[0-9]{2,} 匹配至少两位 0~9 的数字。

[0-9]{2,} => The number was 9.9997 but we rounded it off to 10.0

如果逗号也省略掉则表示重复固定的次数。 例如,[0-9]{3} 匹配3位数字

[0-9]{3} => The number was 9.9997 but we rounded it off to 10.0.
  • “(…)”特征标群

特征标群是一组写在 (...) 中的子模式。例如之前说的 {} 是用来表示前面一个字符出现指定次数。但如果在 {} 前加入特征标群则表示整个标群内的字符重复 N 次。

例如,表达式 (ab)* 匹配连续出现 0 或更多个 ab。

我们还可以在 () 中用或字符 | 表示或。例如,(c|g|p)ar 匹配 car 或 gar 或 par.

(c|g|p)ar => The car is parked in the garage.
  • “|”或运算符

或运算符就表示或,用作判断条件。

例如:(T|t)he|car 匹配 (T|t)he 或 car。

(T|t)he|car => The car is parked in the garage.
  • 转码特殊字符

反斜线 \ 在表达式中用于转码紧跟其后的字符。用于指定 { } [ ] / \ + * . $ ^ | ? 这些特殊字符。

如果想要匹配这些特殊字符则要在其前面加上反斜线 \。例如:“.”是用来匹配除换行符外的所有字符的。

如果想要匹配句子中的“.”则要写成 \. 以下这个例子 \.?是选择性匹配.

(f|c|m)at\.? => The fat cat sat on the mat.
  • 锚点:在正则表达式中,想要匹配指定开头或结尾的字符串就要使用到锚点。^ 指定开头,$ 指定结尾。

“^”号:^ 用来检查匹配的字符串是否在所匹配字符串的开头。

例如:在 abc 中使用表达式 ^a 会得到结果 a。但如果使用 ^b 将匹配不到任何结果。因为在字符串 abc 中并不是以 b 开头。

例如:^(T|t)he 匹配以 The 或 the 开头的字符串。

(T|t)he => The car is parked in the garage.

“$”号:同理于 ^ 号,$ 号用来匹配字符是否是最后一个。

例如:(at\.)$ 匹配以 at. 结尾的字符串。

(at\.) => The fat cat. sat. on the mat.


0x04后续待更:

  1. 简写字符集
  2. 零宽度断言(前后预查)
  3. 标志
  4. 贪婪匹配与惰性匹配(Greedy vs lazy matching)

原文地址:https://www.cnblogs.com/egsec/p/12316193.html

时间: 2024-10-07 13:26:37

正则表达基础学习(一)的相关文章

通过完善邮箱匹配来一步步学习正则表达

首先,在学习之前先确定一下邮箱的格式,邮箱的一般格式为[email protected],其中xxx可为数字.字母.下划线_,中划线-,点号.,加号+等组成. 在看具体代码之前需要先了解一些基础知识 # []表示匹配字符集中的任意一个字符# \w 表示匹配任何字母数字字符# \s表示任何空格字符# \d表示任何十进制数字# +表示匹配1次或多次前面出现的正则表达# *表示匹配0次或多次前面出现的正则表达# (?:)表示一个匹配不用保存的分组 1.匹配最简单的邮箱格式,如[email protec

正则对象与正则表达式的基础学习

正则对象与正则表达式的基础学习 正则表达式是文字匹配的工具,它更像是一个文字模版,只要符合条件的结果都会被筛选出来. 正则表达式在使用上,它依赖于正则对象提供的方法与属性,所以使用正则表达式之前要定义正则对象. 正则表达式的两种使用方式: 1. 定义正则对象 var reg = new RegExp( /regexpression/modified ) //格式一 var reg = new RegExp( 'regexpression' , 'modified' ) //格式二 2. 直接量的

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

JavaScript使用正则表达

JavaScript使用正则表达 正则表达式概述 在前面已经涉及了一些正则表达式的用法,现在将系统地学习正则表达式的语法和 用途.正则表达式主要用于进行字符串的模式匹配,例如判断一个字符串是否符合指定格式等.例如在windows下搜索文件,可以用“*”或者“?”这样的 通配符.在正则表达式的语法中,有更多这样的符号用于表示一个字符串的模式,表7.1列出了所有的特殊符号,它们也被称为元字符. 使用这些元字符,可以表示具有特定模式的字符串,例如: /^\s*$/:匹配一个空行. /\d{2}-\d{

分布式基础学习(1)--分布式文件系统

分布式基础学习 所谓分布式,在这里,很狭义的指代以Google的三驾马车,GFS.Map/Reduce.BigTable为 框架核心的分布式存储和计算系统.通常如我一样初学的人,会以Google这几份经典的论文作为开端的.它们勾勒出了分布式存储和计算的一个基本蓝图,已 可窥见其几分风韵,但终究还是由于缺少一些实现的代码和示例,色彩有些斑驳,缺少了点感性.幸好我们还有Open Source,还有Hadoop.Hadoop是 一个基于Java实现的,开源的,分布式存储和计算的项目.作为这个领域最富盛

零基础学习hadoop到上手工作线路指导(中级篇)

此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为hadoop1.X.hadoop2.X,并且还有hadoop生态系统.这里只能慢慢介绍了.一口也吃不成胖子. hadoop 1.x分为 mapreduce与hdfs其中mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑. 我们不知

零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为hadoop1.X.hadoop2.X,并且还有hadoop生态系统.这里只能慢慢介绍了.一口也吃不成胖子. hadoop 1.x分为mapreduce与hdfs 其中mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑.我们不知道ke

C++泛型基础学习

转载http://blog.csdn.net/xinzheng_wang/article/details/6674847 泛型的基本思想:泛型编程(Generic Programming)是一种语言机制,通过它可以实现一个标准的容器库.像类一样,泛型也是一种抽象数据类型,但是泛型不属于面向对象,它是面向对象的补充和发展.在面向对象编程中,当算法与数据类型有关时,面向对象在对算法的抽象描述方面存在一些缺陷.比如对栈的描述:class stack{ push(参数类型)  //入栈算法 pop(参数

java基础学习总结——Object类

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——Object类 一.Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object.所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗.