正则表达式 - 匹配开始和结束标记

时间:2013-10-14 15:09:14

标签: regex

我有一个数据文件,我试图用VBScript正则表达式对象进行验证。

数据:

01THAILAND       000004
08 000004 05 

正则表达式模式:^01.{15}[0-9]{6}|^08 [0-9]{6} [0-9]{2}.

如果它与第一行具有相同的代码'000004',如何设置我的模式以将08开始的行解析为有效?这两个项目之间存在其他数据行,代码并不总是'000004'!唯一具体的是2字符行标识符和格式。

2 个答案:

答案 0 :(得分:0)

纯正的正则表达式不会削减它,但这可能不是你正在使用的帽子。

这种事物的广泛命名称为“反向引用”,并允许您在模式本身内包含当前正在匹配的正则表达式的一部分。从sed继承的常用语法是\1,用于引用正则表达式的第一个捕获括号。

所以在你的例子中它看起来像:

^01.{15}\([0-9]{6}\)
.*
^08 \1 [0-9]{2}.

请注意,您不再匹配单行,而是整个组。 (要匹配单行,您需要记住原始代码并将其明确包含在终止正则表达式中。)因此,您需要确保您的正则表达式引擎能够进行多行匹配。

答案 1 :(得分:0)

您可以使用\n作为反向引用,其中n是捕获组的索引。演示:

str = "01THAILAND       000004" & vbNewLine & "08 000004 05"

Set re = new regexp
re.Pattern = "\d+\w+ +(\d+)\s+\d+ \1 \d+"    ' \1 is the back reference
re.Global = true

msgbox re.Test(str)

Ninja编辑:你的模式类似于^01.{15}([0-9]{6})\s{1,2}08 \1 [0-9]{2}