Visual Basic 6正则表达式[十六进制]无法正确替换

时间:2011-10-12 04:17:57

标签: regex vb6 hex

我正在尝试将原生x86 asm替换为C ++代码,以便我可以创建一个模拟器。

我得到了这个

If ereg(ASM, "PUSH ([A-F0-9\s]+)", False) Then
    ASM = ereg_replace(ASM, "PUSH ([A-F0-9\s]+)", _
    "regs.d.esp -= 4;" & vbNewLine & _
    "*(unsigned int *)(regs.d.esp) = $1;", False)
End If

我在互联网上找到的功能......应该有效..因为它们在谷歌上。

Function ereg(strOriginalString, strPattern, varIgnoreCase)
    ' Function matches pattern, returns true or false
    ' varIgnoreCase must be TRUE (match is case insensitive) or FALSE (match is case sensitive)
    Dim objRegExp: Set objRegExp = New RegExp
    With objRegExp
        .Pattern = strPattern
        .IgnoreCase = varIgnoreCase
        .Global = True
    End With
    ereg = objRegExp.test(strOriginalString)
    Set objRegExp = Nothing
End Function

Function ereg_replace(strOriginalString, strPattern, strReplacement, varIgnoreCase)
    ' Function replaces pattern with replacement
    ' varIgnoreCase must be TRUE (match is case insensitive) or FALSE (match is case sensitive)
    Dim objRegExp: Set objRegExp = New RegExp
    With objRegExp
        .Pattern = strPattern
        .IgnoreCase = varIgnoreCase
        .Global = True
    End With
    ereg_replace = objRegExp.Replace(strOriginalString, strReplacement)
    Set objRegExp = Nothing
End Function

我启动了。

/* 401187 */
PUSH 466F20

并希望最终得到......

/* 401187 */
regs.d.esp -= 4;
*(unsigned int *)(regs.d.esp) = 466F20;

但是上面的功能,运行结束了..

/* 401187 */
regs.d.esp -= 4;
*(unsigned int *)(regs.d.esp) = 466F20
;

..错误不要担心它不是0x466F20; (我稍后会做第二遍)。

1 个答案:

答案 0 :(得分:1)

糟糕的正则表达......

而不是

"PUSH ([A-F0-9\s]+)"

我必须使用

"PUSH ([A-F0-9]+)"

\s正在捕捉新线。