簡體   English   中英

在正則表達式中匹配字符串

[英]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.

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