将自动正则表达式转换为c#

本文关键字:转换 正则表达式 | 更新日期: 2023-09-27 18:01:17

我无法解决这个问题,我已经给出了这个搜索表达式

.*?(8986(.{8})8A4F03)

在自动运行中非常快,给我1个结果,但如果我在c#中尝试它,它似乎挂起了。我也试过

(8986(.{8})8A4F03)

在autoit和c#中工作得非常快,但给了我2个结果,但我只想要第一个结果。我读过autoit和c#的"备忘单",但我就是不懂。

部分自动代码

Global $SearchExression = _
    ".*?(8B0D(.{8})898D40F1FFFF6A01)" & _ ;Base_Address
    ".*?(8986(.{8})8A4F03)" & _ ;LVL_Offset
    ".*?(898E(.{8})8B5714)" & _ ;Culti_Offset
    ".*?(8996(.{8})8B4718)" & _ ;EXP_Offset
    ".*?(8986(.{8})8B4F04)" & _ ;Spirit_offset
    ".*?(898E(.{8})8B570C)" & _ ;HP_OffSet
    ".*?(8996(.{8})8B471C)" & _ ;MP_OffSet
    ".*?(8986(.{8})8B4F08)" & _ ;CHI_OffSet
    ".*?(898E(.{8})8B5710)" & _ ;MaxHP_OffSet
    ".*?(8996(.{8})8B4720)" & _ ;MaxMP_OffSet
    ".*?(8986(.{8})8A4702)" & _ ;MaxCHI_Offset
    ".*?(8B108996(.{8})8B4004)" & _ ;gold_Offset
    ".*?(6A0A8986(.{8}))" & _ ;state_Offset
    ".*?(8986(.{8})8B40048BC8)" & _ ;castid_Offset
    ".*?(A1(.{8})578B482081C1EC)" & _ ;BaseCall_Offset
    ".*?(568BF18B86(.{8})85C0)" & _ ;target_Offset
    ".*?(8B8E(.{8})3BCB740655)" & _ ;pet_Offset
    ".*?(8B8E(.{8})8B47503BC8)" & _ ;str_Offset
    ".*?(8B96(.{8})8B47543BD0)" & _ ;dex_Offset
    ".*?(8B86(.{8})8B4F5C3BC1)" & _ ;vit_Offset
    ".*?(8B8E(.{8})8B47603BC8)" & _ ;mag_Offset
    ".*?(8B96(.{8})8B47643BD0)" & _ ;reputation_Offset
    ".*?(EB5D8B8E(.{8})B801)" & _ ;class_Offset
    ".*?(8B491C33C08B91(.{8})85D2)" & _ ;jump_Offset
    ".*?(32C0C38B89(.{8})568BB0)" & _ ;charid_Offset
    ".*?(8B83(.{8})8D4C243C)" & _ ;name_Offset
    "";".*?((.{8}))" & _ ;
 Global $NameArray[26] = [ _
    "Base_Address", _
    "LVL_Offset", _
    "Culti_Offset", _
    "EXP_Offset", _
    "Spirit_Offset", _
    "HP_Offset", _
    "MP_Offset", _
    "CHI_Offset", _
    "MaxHP_Offset", _
    "MaxMP_OffSet", _
    "MaxCHI_Offset", _
    "Gold_Offset", _
    "State_Offset", _
    "CastID_Offset", _
    "BaseCall_Address", _
    "TargetID_Offset", _
    "Pet_Offset", _
    "STR_Offset", _
    "DEX_Offset", _
    "VIT_Offset", _
    "MAG_Offset", _
    "Reputation_Offset", _
    "Class_Offset", _
    "Jump_Offset", _
    "CharID_Offset", _
    "Name_Offset"]
If FileExists($File) Then
    $FileHnd = FileOpen($File, 16)
    Local $Data = FileRead($FileHnd, FileGetSize($File))
    FileClose($FileHnd)
Else
    Local $Data = ""
EndIf
If $Data <> "" Then
    Local $x = 0
    Local $check = StringRegExp($Data, $SearchExression, 3)
    If IsArray($check) Then
        Global $info[UBound($check) / 2][3]
        For $i = 1 To (UBound($check) - 1) Step 2
            MsgBox(0,"",$check[$i])
            $info[$x][0] = $NameArray[$x]
            $info[$x][1] = _RemoveZero(Reverse($check[$i]))
            $info[$x][2] = Dec(Reverse($check[$i]))
            $x += 1
        Next

目前为止的c#代码

if (File.Exists(file) == true)
        {
            FileStream inputFile = new FileStream(file, FileMode.Open , FileAccess.Read,FileShare.ReadWrite);
            byte[] byteBuffer = new byte[inputFile.Length];
            inputFile.Read(byteBuffer, 0, (int) inputFile.Length);
            inputFile.Dispose();
            StringBuilder client = new StringBuilder();
            for (int i = 0; i < byteBuffer.Length; i++)
            {
                client.Append(byteBuffer[i].ToString("X2"));
            }
            // Clipboard.SetText(client.ToString()); //get string to paste into regexbuddy
            Regex rx = new Regex(@".*?(8986(.{8})8A4F03)"); //works perfect in autoit but hangs here
            //Regex rx = new Regex(@"(8986(.{8})8A4F03)"); // too many groups + too many matches
            //Regex rx = new Regex(@"8986(.{8})8A4F03"); //one group but too many matches
            foreach (Match mx in rx.Matches(client.ToString()))
            {
                Console.WriteLine(mx);
                //Console.WriteLine(mx.Groups[1]);
            }
        }

最初的表达式不是我做的,我不知道它们是如何工作的

字符串的第一部分是

4D5A90000300000004000000FFFF0000B8000000000000004000000

Result I want is

6C040000

将自动正则表达式转换为c#

试试这个c#代码片段:

string resultString = null;
resultString = Regex.Match(text, "(?<=8986).{8}(?=8A4F03)").Value;