【正则表达式教程】锚点
字符串的开始和结束符到目前为止,我们已经了解了文字字符,字符类和点号。将其中之一放在正则表达式中会告诉正则表达式引擎尝试匹配单个字符。 锚点和上面三种不同。它根本不匹配任何字符,而是匹配字符之前,之后或之间的位置。它们可用于在特定位置“固定”正则表达式匹配。符号^...
2024-01-10【正则表达式教程】量词
星号*和加号+重复性前面已经引入了一个重复运算符或量词:问号 ? 。它告诉正则引擎尝试将前面的正则匹配零次或一次,其实就是使前面的正则成为可选的,也就是可有可无。 星号*告诉引擎尝试将先前的正则匹配零次或更多次。加号告诉引擎将先前的正则匹配至少一次或多次。<[A-Za-z][A-Za-z0-9]*>匹...
2024-01-10【正则表达式教程】递归
正则表达式递归Perl 5.10,PCRE 4.0,Ruby 2.0以及它们的更高版本均支持正则表达式递归。Perl使用语法(?R)和(?0)来表示递归(两个作用是相同的)。Ruby 2.0使用\g<0>来表示递归。从7.7版开始,PCRE支持这三种方式——(?R)、(?0)和\g<0>。早期版本仅支持Perl语法(Perl实际上是从PCRE复制的)。Delphi,PHP和R的最新版本...
2024-01-10【正则表达式教程】简介
文字字符最基本的正则表达式包含一个单一的文字字符,例如a。它会去检查字符串,找出该字符第一次出现的位置,并返回该字符。如果有字符串'Jack is a boy',则匹配'J'之后的'a' 。这个'a'是否在单词中间的对于正则表达式引擎来说是无关紧要的。如果对我们而言很重要,则需要使用单词边界来告知正...
2024-01-10【正则表达式教程】子例程
正则表达式子例程Perl 5.10,PCRE 4.0和Ruby 1.9支持正则表达式子例程调用。子例程与正则表达式递归非常相似。子例程调用仅匹配捕获组内的正则表达式,而不是再次匹配整个正则表达式。您可以从正则表达式中的任何地方对任何捕获组进行子例程调用。如果将调用放在要调用的组内,则将有一个递归捕...
2024-01-10【正则表达式教程】平衡组
将嵌套构造与平衡组匹配.NET正则表达式引擎支持一个叫平衡组的特殊功能。平衡组的主要目的是匹配平衡结构或嵌套结构,这是它们从中获得名称的地方。从技术上讲,该功能更准确的名称是捕获组减法。这就是功能的真正作用。这是.NET解决其他正则表达式类型(如Perl,PCRE和Ruby)使用正则表达式递...
2024-01-10【正则表达式教程】分组命名
命名捕获组和反向引用几乎所有现代正则表达式引擎都支持编号的捕获组和编号的反向引用。在一个很长的正则表达式中,如果具有许多组和反向引用那这个正则是很难阅读的。由于在正则表达式的中间添加或删除捕获组会使在添加或删除的组之后的所有组的数目变少,这就导致先前我们使用的反向引...
2024-01-10【正则表达式教程】选择符号
用竖线符号来进行选择在字符类中已经解释了如何使用字符类来匹配多个可能字符中的单个字符。选择模式是相似的。我们可以使用选择符来匹配多个可能的正则表达式中的单个正则表达式。 如果要搜索文字文本cat或dog ,请用竖线或竖线符号将两个选项分开:cat|dog。如果我们需要更多选项,只需...
2024-01-10【正则表达式教程】反向引用
使用反向引用再次匹配相同的文本反向引用与捕获组先前匹配的文本匹配。假设我们要匹配一对开始和结束的HTML标记,以及两者之间的文本。通过将开始标记置于反向引用中,我们就可以将结束标记的标记名称重复使用。具体正则表达式如下:<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1>。此正则表达式仅包含一个小括...
2024-01-10【正则表达式教程】条件子组
正则表达式中的If-Then-Else条件特殊的构造(?ifthen|else)允许我们创建条件正则表达式。如果if部分评估为true,则正则表达式引擎将尝试匹配then部分。否则,尝试使用else部分。语法由一对括号组成。左括号必须跟一个问号,紧接着是if部分,然后是then部分。这部分后面可以有一个竖线和else部分。我们可以...
2024-01-10【正则表达式教程】原子分组
原子分组原子组是一个组,当正则表达式引擎退出该组时,它会自动丢弃该组内所有标记记住的所有回溯位置。原子组是不可捕获的。语法为(?>group)。环视组也是原子的。大多数现代的正则表达式都支持原子分组,包括JGsoft,Java,PCRE,.NET,Perl,Boost和Ruby。其中大多数还支持所有格修饰符,这在本质...
2024-01-10【正则表达式教程】无限递归
无限递归正则表达式,例如(?R)?z或a?(?R)?z或a|(?R)z在进入递归前没有任何的匹配,这种情况会导致无限递归。如果正则表达式引擎在不推进文本的情况下到达了递归,则下一个递归将在不推进文本的情况下再次到达递归。对于第一个正则表达式,这种情况会在匹配开始时立即发生。对于剩下的其他两个,...
2024-01-10【正则表达式教程】所有格量词
所有格量词关于 重复运算符 或 量词 的一节说明了贪婪和懒惰重复之间的区别。贪婪和懒惰决定了正则表达式引擎尝试正则表达式模式的可能排列的顺序。贪婪的量词首先尝试尽可能多地重复标记,然后随着引擎回溯以寻找整体匹配,逐渐放弃匹配。惰性量词首先根据需要重复标记几次,然后随着引...
2024-01-10【JS】可视化正则表达式教程
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。github 地址:https://github.com/qq44924588...双12阿里服务器27块,通用点击这里购买可以找我返现30,等于27块就能买到了,只限新用户,可以用家人的手机号购买!在NLP中,根据模式检查文本或从...
2024-01-10【正则表达式教程】分支重置组
分支重置组Perl 5.10引入了一个新的正则表达式功能,称为分支重置组。JGsoft V2和PCRE 7.2及更高版本也支持此功能,PHP,Delphi和R具有基于PCRE的正则表达式功能的语言也支持此功能。Boost将它们添加到1.42版的ECMAScript语法中。 分支重置组内的选择项共享相同的捕获组。语法是(?|regex),其中...
2024-01-10【正则表达式教程】捕获和分组
使用括号()进行分组和捕获通过在圆括号或括号内放置正则表达式的一部分,可以将正则表达式的该部分组合在一起。这使我们可以将量词应用到整个组,或将替换限制为正则表达式的一部分。 仅仅只有小括号()可用于分组。方括号定义了一个 字符类;量词使用了大括号{}并有特定的限制。 括...
2024-01-10【正则表达式教程】点号的使用
点号.匹配(几乎)任何字符在正则表达式中,点号.是最常用的元字符之一。不幸的是,它也是最常被滥用的元字符。 .匹配单个字符,而无需关心该字符是什么。然而点.是不能匹配换行符的。在本教程中讨论的所有regex风格中,默认情况下,.都不与换行符匹配。 存在该例外主要是由于历史原因。...
2024-01-10【正则表达式教程】字符类减法
字符类减法XML Schema,XPath,.NET(2.0版及更高版本)和JGsoft regex样式支持字符类减法。它使得匹配一个列表(character class)中存在的任何单个字符,但不匹配另一个列表(subtract class)中存在的任何单个字符变得容易。语法为[class-[subtract]]。如果连字符后的字符是一个开括号,则这些样式会将连字符解...
2024-01-10【正则表达式教程】模式修饰符
在正则表达式内指定模式通常,匹配模式是在正则表达式之外指定的。在编程语言中,我们可以将它们作为标志传递给regex构造函数,或将它们附加到regex中。有时,工具或语言不提供指定匹配选项的功能。Java中String.matches()方法没有像Pattern.compile()那样带有用于匹配选项的参数。或者,正则表达式风格...
2024-01-10【正则表达式教程】问号的作用
可选项问号使正则表达式中的前一个标记为可选。colou?r可以匹配colour和color 。我们称?为量词。 通过使用括号将它们组合在一起,然后将问号放在右括号的后面,可以使多个标记成为可选标记。例如:Nov(ember)?匹配可以匹配Nov和November。 我们可以通过包含多个问号来编写有许多选择方案...
2024-01-10【正则表达式教程】字符类交集
字符类交集Java,JGsoft V2和Ruby 1.9及更高版本支持字符类交集。它使匹配那种必须出现在两组字符中的任何单个字符变得容易。其语法为[class&&[intersect]] 。我们可以在相交的字符类中使用完整的字符类语法。 如果相交的类不需要负号,则Java和Ruby允许我们省略嵌套的方括号:[class&&intersect] 。 ...
2024-01-10【正则表达式教程】递归中的回溯
递归和子例程调用可能是或不是原子的本教程前面的章节介绍了正则表达式递归和正则表达式子例程。在本章节中,“递归”一词是指整个正则表达式的递归,捕获组的递归以及对捕获组的子例程调用。 如果递归后剩余的正则表达式失败,则Perl和Ruby会返回递归。他们根据需要尝试递归的所有排列...
2024-01-10【正则表达式教程】相对反向引用
相对反向引用一些应用程序支持相对的反向引用。它们使用负数来引用反向引用之前的组。要查找相对反向引用所引用的组,要获取反向引用的绝对数量,并计算(从后向引用开始并通过正则表达式从右向左)那些捕获组的开括号。因此(a)(b)(c)\k<-1>匹配abcc,(a)(b)(c)\k<-3>匹配abca。如果后向引用在捕获组...
2024-01-10【正则表达式教程】反向引用 续
对匹配失败的组的反向引用上一篇介绍的反向引用适用于所有正则表达式,除了少数根本不支持反向引用的正则引擎。完全不匹配的捕获组的反向引用与完全不参与匹配的捕获组的反向引用之间是有差异的。正则表达式(q?)b\1与b匹配。q?是可选的,不匹配任何内容,导致(q?)成功匹配但是并不捕获任何内...
2024-01-10【正则表达式教程】递归中的量词
递归量词在介绍递归时展示了a(?R)?z是如何匹配aaazzz 。该量词?使前面的标记为可选。换句话说,它将标记重复0到1次。在a(?R)?z中(?R)是可选的,因为后面跟着一个问号?。我们可能想知道为什么正则表达式尝试了三次递归,而不是一次尝试或根本没有尝试。原因是在递归时,正则表达式引擎在尝试整个...
2024-01-10