一、^ 和 $ 的匹配

^once:这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串;buct$:  这个模式包含了$, 表示该模式只匹配以buct结尾的字符串;^buctser$:  这个模式包含了^$,所以该模式只匹配“buctser” 这一个值了。

once :  如果既不包含  又不包含 ,那么只要含有once中的元素的都是符合的。例如:
Who kept all of his cash in a bucket.  (o-n-c-e)四个元素都有,所以符合匹配规则。

二、*  +  ? 的匹配 --限定字符

上面四种都是限定符,在表达式中控制字符出现的次数。例如

o*: 表示o在匹配对象中出现0次或者多次
o+:表示o在匹配对象中出现1次或者多次
o?:表示o在匹配对象中出现0次或者1次

注意*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

例如:  o+?:只匹配单个o.

三、[]的匹配

若要创建匹配字符组的一个列表,请在方括号([ 和 ])内放置一个或更多单个字符。当字符括在中括号内时,该列表称为"中括号表达式"。与在任何别的位置一样,普通字符在中括号内表示其本身,即,它在输入文本中匹配一次其本身。大多数特殊字符在中括号表达式内出现时失去它们的意义。不过也有一些例外,如:

  • 如果 ] 字符不是第一项,它结束一个列表。若要匹配列表中的 ] 字符,请将它放在第一位,紧跟在开始 [ 后面。
  • \ 字符继续作为转义符。若要匹配 \ 字符,请使用 \\。

括在中括号表达式中的字符只匹配处于正则表达式中该位置的单个字符。以下正则表达式匹配 Chapter 1、Chapter 2、Chapter 3、Chapter 4 和 Chapter 5:

/Chapter [12345]/

四、替换和分组

替换使用 | 字符来允许在两个或多个替换选项之间进行选择。例如,可以扩展章节标题正则表达式,以返回比章标题范围更广的匹配项。但是,这并不象您可能认为的那样简单。替换匹配 | 字符任一侧最大的表达式。

您可能认为,下面的表达式匹配出现在行首和行尾、后面跟一个或两个数字的 Chapter 或 Section:

/^Chapter|Section [1-9][0-9]{0,1}$/

很遗憾,上面的正则表达式要么匹配行首的单词 Chapter,要么匹配行尾的单词 Section 及跟在其后的任何数字。如果输入字符串是 Chapter 22,那么上面的表达式只匹配单词 Chapter。如果输入字符串是 Section 22,那么该表达式匹配 Section 22。

若要使正则表达式更易于控制,可以使用括号来限制替换的范围,即,确保它只应用于两个单词 Chapter 和 Section。但是,括号也用于创建子表达式,并可能捕获它们以供以后使用,这一点在有关反向引用的那一节讲述。通过在上面的正则表达式的适当位置添加括号,就可以使该正则表达式匹配 Chapter 1 或 Section 3。

下面的正则表达式使用括号来组合 Chapter 和 Section,以便表达式正确地起作用:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

尽管这些表达式正常工作,但 Chapter|Section 周围的括号还将捕获两个匹配字中的任一个供以后使用。由于在上面的表达式中只有一组括号,因此,只有一个被捕获的"子匹配项"。

在上面的示例中,您只需要使用括号来组合单词 Chapter 和 Section 之间的选择。若要防止匹配被保存以备将来使用,请在括号内正则表达式模式之前放置 ?:。下面的修改提供相同的能力而不保存子匹配项:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

除 ?: 元字符外,两个其他非捕获元字符创建被称为"预测先行"匹配的某些内容。正向预测先行使用 ?= 指定,它匹配处于括号中匹配正则表达式模式的起始点的搜索字符串。反向预测先行使用 ?! 指定,它匹配处于与正则表达式模式不匹配的字符串的起始点的搜索字符串。

例如,假设您有一个文档,该文档包含指向 Windows 3.1、Windows 95、Windows 98 和 Windows NT 的引用。再进一步假设,您需要更新该文档,将指向 Windows 95、Windows 98 和 Windows NT 的所有引用更改为 Windows 2000。下面的正则表达式(这是一个正向预测先行的示例)匹配 Windows 95、Windows 98 和 Windows NT:

/Windows(?=95 |98 |NT )/

找到一处匹配后,紧接着就在匹配的文本(不包括预测先行中的字符)之后搜索下一处匹配。例如,如果上面的表达式匹配 Windows 98,将在 Windows 之后而不是在 98 之后继续搜索。

五、特殊例子

正则表达式 描述
/\b([a-z]+) \1\b/gi 一个单词连续出现的位置。
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 将一个URL解析为协议、域、端口及相对路径。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章节的位置。
/[-a-z]/ A至z共26个字母再加一个-号。
/ter\b/ 可匹配chapter,而不能匹配terminal。
/\Bapt/ 可匹配chapter,而不能匹配aptitude。
/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。
/^\s*$/ 匹配空行。
/\d{2}-\d{5}/ 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ 匹配 HTML 标记。

转载于:https://www.cnblogs.com/renxiaoren/p/5315662.html

正则表达式的学习二:正则表达式的匹配规则总结相关推荐

  1. java linux runtime 正则表达式_Java学习之正则表达式

    Java正则表达式字符串模式. 正则表达式可以用来搜索.编辑和处理文本. 正则表达式不尽限于一种语言,但在每一种语言中又细微的差别. java.util.regex包中主要有这3个类: Pattern ...

  2. 【Nginx学习系列】location匹配规则

    location 匹配规则 规则 匹配 = 严格匹配.如果请求匹配这个 location,那么将停止搜索并立即处理此请求 ~ 区分大小写匹配(可用正则表达式) ~* 不区分大小写匹配(可用正则表达式) ...

  3. UE Lyda项目学习 二、距离匹配 步幅适配 同步组

    需要在插件中开启Animation Locomation Library插件和Animation Warping插件 一.距离匹配 距离匹配:解决人物在走的时候,脚的动画和移动的速度不对齐. 打开AB ...

  4. JavaScript正则表达式的学习

    JavaScript正则表达式的学习 1. 正则表达式概述 1.1 什么是正则表达式 ​ 正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式.在 JavaScrip ...

  5. Android IntentFilter的匹配规则

    IntentFilter的匹配规则 IntentFilter的匹配规则 IntentFilter的匹配规则 一.Intent简介 二.IntentFilter匹配规则 1.action的匹配规则 2. ...

  6. tomcat首页welcome-file-list设置与url-pattern匹配规则

    一.welcome-file-list 1. <welcome-file-list>标签下可以设置多个首页<welcome-file>,容器启动后会在根目录下依次查找匹配的物理 ...

  7. 正则,bs4 ,xpath 和jsonpath 的匹配规则

    正则匹配: 规则 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : ...

  8. url-pattern的匹配规则

    一.url-pattern的三种写法 1.精确匹配.以"/"开头,加上servlet名称 /ad 2.路径匹配.以"/"开头,加上通配符"*" ...

  9. Python学习基础笔记三十二——正则表达式

    官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符.及这些特定字符的组合,组成一个"规则字符串",这个规则字符串用来表达对字符串的一种过滤逻辑. 1. ...

最新文章

  1. 来讲讲Cortex-M、 ARM、和Linux
  2. 每秒上千订单场景下的分布式锁高并发优化实践!
  3. Java Thead.interrupt 方法没有使线程停止工作
  4. 如何检查php代码规范,用CodeSniffer检查PHP项目的代码规范
  5. Hadoop 2.7集群环境搭建
  6. linux隔一级目录找文件,linux查看文件和子目录
  7. Python实现删除字符串中的字符
  8. 固态硬盘是什么接口_PCI-E接口的固态硬盘和SATA接口的有什么区别?
  9. 爸妈老了而我还未长大--《Coraline》观后感
  10. 个人总结感想系列 - 2013年工作和生活总结
  11. flink运行job任务时报错 Could not retrieve the execution result
  12. 俄罗斯方块游戏开发教程7:消除判断和处理
  13. gitlab rpm包安装方法
  14. Admob广告收入怎么算的?
  15. AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1
  16. 端口映射/dmz主机_在DMZ中使用Notes / Domino SMTP
  17. 100+文档格式预览,私有化部署,10分钟搭建专属IM
  18. MyIE2几个让我欣赏的地方
  19. [bzoj-4808]马 题解
  20. SQL重叠交叉区间问题分析--HiveSQL面试题30

热门文章

  1. ubuntu下小键盘不能用
  2. ViBe算法原理和代码解析
  3. PCANet --- 用于图像分类的深度学习基准
  4. 如何在基于Bytom开发过程中集成IPFS
  5. 《电子商务法》实施倒计时,这些执行细则需注意!
  6. 多种分布式文件系统简介
  7. 2008.09.20三多寨
  8. 【leetcode】1032. Stream of Characters
  9. 开源分布式中间件 DBLE Schema.xml 配置解析
  10. 如何kill掉tomcat服务