我想在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 :(得分:3)
使用此正则表达式,您将不得不从结果中修剪尾随空格:
(([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);
}
答案 1 :(得分:0)
请尝试以下操作:
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();
答案 2 :(得分:0)
或尝试我的解决方案
(?<=FF\s)([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E]|\s?)+((?<=$)|(?<=\s))