我有一个数据文件,我试图用VBScript正则表达式对象进行验证。
数据:
01THAILAND 000004
08 000004 05
正则表达式模式:^01.{15}[0-9]{6}|^08 [0-9]{6} [0-9]{2}.
如果它与第一行具有相同的代码'000004',如何设置我的模式以将08开始的行解析为有效?这两个项目之间存在其他数据行,代码并不总是'000004'!唯一具体的是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}