在正则表达式中匹配字符串

本文关键字:字符串 正则表达式 | 更新日期: 2023-09-27 18:05:59

这是我想要匹配的字符串:

"t=0, data=00 00 00 f1 00 00 00 00". 

以下作品:

  • (@"^(t)=[0-9]+,(('s[0-9A-F-a-f]{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-F-a-f]{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]+,[a-z ]+=匹配十六进制数字之前的所有内容。
  • ([A-Fa-f0-9]{2} ?){8}匹配8组2个十六进制字符,后面或不后面有空格。

所有内容都包含在$1变量中,因为括号匹配整行。

^(t)=[0-9]+,'s'w+=([0-9A-Fa-f]{2}('s|$)){8}就可以了。您在每两个数字后面放置了一个空白字符,但是由于最后两个数字后面没有空白,因此正则表达式将不匹配。现在regex引擎可以在空白字符或字符串结束之间进行选择。

编辑:将字边界改为字符串的结尾

Edit2:还有,看看这个:http://www.regular-expressions.info/anchors.html

for ('s[0-9A-F-a-f]{2})要匹配=符号后面的第一对数字,需要在=符号和第一个数字之间有一个空格。但你似乎不知道。

('s[0-9A-F-a-f]{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