[英]Matching a string in regex
這是我要匹配的字符串:
"t=0, data=00 00 00 f1 00 00 00 00".
以下作品:
(@"^(t)=[0-9]+,((\\s[0-9A-Faf]{2}){8})")
匹配: "t=0, 00 00 00 f1 00 00 00 00"
(@"^(t)=[0-9]+,\\s\\w+=")
匹配: "t=0, data="
以下內容不起作用 :
(@"^(t)=[0-9]+,\\s\\w+=((\\s[0-9A-Faf]{2}){8})")
不匹配: "t=0, data=00 00 00 f1 00 00 00 00"
這是我目前的代碼:
Regex rgx = new Regex(@"^(t)=[0-9]+,\s\w+=((\s[0-9A-F-a-f]{2}){8})");
if(rgx.IsMatch(line.Trim())){
//...
}
如果我很了解您的需求,則可以使用以下正則表達式:
Regex rgx = new Regex(@"(^t=[0-9]+,[a-z ]+=([A-Fa-f0-9]{2} ?){8})");
if(rgx.IsMatch(line.Trim())){
//...
}
所以:
^t=[0-9]+,[az ]+=
匹配十六進制數字之前的所有內容。 ([A-Fa-f0-9]{2} ?){8}
匹配8組2個十六進制字符,后跟一個空格。 $1
變量中包含所有內容,因為括號括起了整行。
^(t)=[0-9]+,\\s\\w+=([0-9A-Fa-f]{2}(\\s|$)){8}
可以解決問題。 您在每兩個數字后放置一個空格字符,但是由於最后兩個數字在其后沒有空格,因此正則表達式將不匹配。 現在,正則表達式引擎可以在空格字符或字符串結尾之間進行選擇。
編輯:將單詞邊界更改為字符串的結尾
Edit2:另外,看看這個: http : //www.regular-expressions.info/anchors.html
為(\\ s [0-9A-Faf] {2})匹配=符號后的第一對數字,您需要在=符號和第一位數字之間留一個空格。 但似乎你沒有。
另外(\\ s [0-9A-Faf] {2})是否正確? 我認為您需要刪除F和a之間的“-”。
好的,要匹配模式:
t=0, data=00 00 00 f1 00 00 00 00
我做了一些假設:
t=
之后可以有任意數量的數字 data=
后面有8組,每組兩個十六進制數字 然后此模式將起作用:
^t=[0-9]++,\s*+data=(?<data>(?:[0-9a-f]{2}\s?){8})$
Java測試
public static void main(String[] args) throws SQLException {
final String data = "t=0, data=00 00 00 f1 00 00 00 00";
final Pattern pattern = Pattern.compile("^t=[0-9]++,\\s*+data=(?<data>(?:[0-9a-fA-F]{2}\\s?){8})$");
final Matcher matcher = pattern.matcher(data);
if (matcher.matches()) {
System.out.println(matcher.group());
System.out.println(matcher.group("data"));
}
}
輸出:
t=0, data=00 00 00 f1 00 00 00 00
00 00 00 f1 00 00 00 00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.