阅读铁路图

Regexper生成的图像通常被称为“铁路图”。 这些图是一种直接的方式,用于说明在正则表达式中有时会变得非常复杂的处理,并带有嵌套循环和可选元素。 阅读这些图的最简单方法是从左边开始,然后按照右边的路线。 如果遇到分支,那么可以选择多个路径中的一个(并且这些路径可以循环回到图的前面部分)。 为了使字符串成功地匹配图表中的正则表达式,您必须能够在从左到右移动时完成图表的每个部分,然后继续完成整个图表。

Created with Snap Lions and , tigers , and bears. Oh my!

举个例子,这个表达会匹配“狮子,老虎和熊,哦,我的!” 或更符合语法的“狮子,老虎和熊,哦,我的!” (有或没有牛津逗号)。 图表首先匹配字符串“Lions”; 你不能在你的输入中继续。 然后在逗号或字符串“和”之间进行选择。 无论您做出什么选择,输入字符串都必须包含“老虎”,然后包含可选逗号(您的路径可以通过逗号或绕过逗号)。 最后,字符串必须以“和熊,哦,我的!”结尾。

这些图的基本部分

要理解的这些图中最简单的部分是匹配一些特定位置的文本而没有选项的部分。 它们是:文字,逃逸序列和“任何字符”。

字面

Created with Snap A literal example

文字匹配确切的文本字符串。 它们以浅蓝色框显示,并且引用了内容(以便更容易看到任何前导或尾随空白)。

转义序列

Created with Snap word 0x7F U+00BB Back reference (group = 1) null (0x00)

转义序列显示在绿色框中,并包含他们将匹配的字符类型的描述。

“任何角色”

Created with Snap any character

“任何字符”与转义序列相似。 它匹配任何单个字符。

字符集

Created with Snap One of: # - a z line feed (0x0A) None of: $ - 0 9 backspace (0x08)

字符集将匹配或不匹配单个字符的集合。 它们显示为包含文字和转义序列的框。 顶部的标签表示该字符集将与所包含项目的“一个”或包含项目的“无”匹配。

子表达式

Created with Snap group #1 example white space positive lookahead content

子表达式在表达式中的项目周围用虚线轮廓表示。 捕获的子表达式将标记为它们将被捕获的组编号。 积极和消极的前瞻被贴上标签。

轮流

Created with Snap one white space two non-word three tab (0x09) four line feed (0x0A)

轮换为经常性扩展提供选择。 它表现为多种选择的表达方式。

量词

量词表示部分表达式是否应该重复或可选。 它们的显示方式类似于交替,通过图分支的路径(并且可能循环回自己)。 除非通过路径上的箭头指示,否则首选路径将继续直行。

零或更多的

Created with Snap greedy
贪婪的量词
Created with Snap non-greedy
非贪婪的量词

零或更多的量词匹配模式的任何重复次数。

需要

Created with Snap greedy
贪婪的量词
Created with Snap non-greedy
非贪婪的量词

所需的量词匹配模式的一个或多个重复。 请注意,它没有允许模式像零或更多量词一样被跳过的路径。

可选的

Created with Snap greedy
贪婪的量词
Created with Snap non-greedy
非贪婪的量词

可选的量词与模式最多匹配一次。 请注意,它没有允许模式像零个或多个或所需量词一样循环回去的路径。

范围

Created with Snap greedy 4…9 times repeats 5…10 times in total
贪婪的量词
Created with Snap non-greedy 4…9 times repeats 5…10 times in total
非贪婪的量词

范围量词指定模式可能重复的次数。 这里提供的两个例子都有一个范围“{5,10}”,循环分支的标签表示可以遵循分支的次数。 值比表达式中指定的值小1,因为在重复它是选项之前,模式必须匹配一次。 因此,对于这些示例,模式将匹配一次,然后循环将遵循4到9次,总共可以匹配5到10个模式。