簡體   English   中英

需要幫助編寫正則表達式

[英]Need help writing regular expression

我想在FF之后搶東西,但不包括FF。

[ 4xFF 82 DD E6 0F 59 EF 9B 0F 00 FF FF FF FF FF 82 A6 06 2C 81 FD 32 00 40 6B]

所以我想要以下兩個匹配項:

82 DD E6 0F 59 EF 9B 0F 00

82 A6 06 2C 81 FD 32 00 40 6B

我想出了這個,但並沒有在兩場比賽中抓住他們。

我也認為它有點漫長的模式。

(?!FF)((\d\d )|(\d[A-Z|a-z] )|([A-Z|a-z]\d )|([A-Z|a-z][A-Z|a-z] ))((\d\d )|(\d[A-Z|a-z])|([A-Z|a-z]\d)|([A-Z|a-z][A-Z|a-z]))

使用此正則表達式,您將不得不從結果中修剪尾隨空格:

(([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E])\s?)+

說明

((
  [0-9A-E][0-9A-F]      A hex digit excluding "F", followed by a hex digit
  |                     or
  [0-9A-F][0-9A-E]      A hex digit, followed by a hex digit excluding "F"
 )
 \s?                    an optional space
)+                      The whole pattern repeated at least once

此模式描述了不包括數字FF的2位十六進制數字的序列。

string pattern = @"(([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E])\s?)+";
var matches = Regex.Matches(input, pattern);
foreach (var match in matches) {
    Console.WriteLine(match.Value.TrimEnd());
}

我之前的解決方案返回了您要求的2個匹配項。 如果您只是跳過所有FF而僅需要一個十六進制數字,則可以像這樣搜索

string pattern = "[0-9A-E][0-9A-F]|[0-9A-F][0-9A-E]";
var matches = Regex.Matches(input, pattern);
foreach (var match in matches) {
    Console.WriteLine(match.Value);
}

嘗試以下操作:

            string input = "[ 4xFF 82 DD E6 0F 59 EF 9B 0F 00 FF FF FF FF FF 82 A6 06 2C 81 FD 32 00 40 6B]";
            string pattern = @"(?'prefix'(\sFF)+)\s(?'capture'[^\]]+)";

            Match match = Regex.Match(input,pattern);

            Console.WriteLine(match.Groups["capture"].Value);
            Console.ReadLine();

或者嘗試我的解決方案

   (?<=FF\s)([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E]|\s?)+((?<=$)|(?<=\s))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM