正则表达式 - 基于匹配内的值匹配长度(使用变量?)

时间:2014-01-06 14:15:08

标签: regex string variables expression

我想知道是否可以将表达式中的值用作表达式第二部分的变量

目标是从内存转储中提取一些特定的字符串。字符串的一部分基于(或多或少)固定结构,可以使用正则表达式很好地描述。问题是字符串的第二部分,它具有可变长度而没有“页脚”或任何可以“匹配”为“END”的内容。 相反,第一部分的第2位有一个长度指示器。

这是一个简化的示例字符串,它喜欢在大文件中找到(所有其他文件)

00 24 AA BB AA DD EE FF GG HH II JJ ###########(#beeing不需要的数据)

让我们假设主结构总是00 XX AA BB AA - 但最后一部分(从DD开始)将根据XX的值为每个字符串的长度变化

我知道这可以在正则表达式之外的代码中完成,但我很好奇,如果它可能:)

1 个答案:

答案 0 :(得分:2)

简答:

答案很长:

您可以通过两个步骤实现您想要的目标:

  • 提取字符串
  • 中的值
  • 动态构建匹配的正则表达式

PSEUDO CODE

s:='00 24 AA BB AA DD EE FF GG HH II JJ ###########'
re:=/00 (\d{2}) AA BB AA/

if 
   s::matches(re)
then
   match := re::match(s)
   len := matches(1)

   dynamicRE := new Regexp(re::toString() + ' (?:[A-Z]{2} ){' + len + '}') 
   // dynamicRE == /00 (\d{2}) AA BB AA (?:[A-Z]{2} ){24,24}/

   if s::matches(dynamicRE) then
      // MATCH !!
   else
      // NO MATCH !!
   end if
end if