如何将任何东西匹配到一个组中的字符序列

本文关键字:一个 字符 任何东 | 更新日期: 2023-09-27 18:11:54

我有这个字符串序列

game (
    name "!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.]"
    description "!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.]"
    rom ( name "!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.].nes" size 40976 crc 2e2bf112 md5 b1a0e41cfd30c1d61de3b7900232de59 sha1 7849ccb4cba5714042694da0e076092565023fc9 )
)
game (
    name "'89 Dennou Kyuusei Uranai (1988-12-10)(Induction Produce)(JP)"
    description "'89 Dennou Kyuusei Uranai (1988-12-10)(Induction Produce)(JP)"
    rom ( name "'89 Dennou Kyuusei Uranai (1988-12-10)(Induction Produce)(JP).nes" size 262160 crc 679db8f7 md5 31c66f47bd73568b4a675c9f8d995684 sha1 3918c52a5491695ed6b10b65f59622687dd7dc66 )
)

我想匹配rom ( name"" size之间的字符,如果它匹配给定的crc值。我现在有这个regex

(?<=name ")(.+)(?= crc 2e2bf112)

符合!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.].nes" size 40976

我需要一个只匹配!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.].nes的正则表达式。

我试过像这样添加另一个环顾(?<=name ")(.+)(?=" size)(?= crc 2e2bf112)但这和任何东西都不相符。除了crc之外,我不知道size之后的东西的长度或值,所以我无法与[0-9] s匹配

我正在使用RegExr来构建我的正则表达式,正则表达式本身将在。net/c#代码中使用。

如何将任何东西匹配到一个组中的字符序列

使用这个正则表达式:

(?<=rom '( name "").*?(?="" size 'd+ crc 2e2bf112)
在c#

:

string theMatch = Regex.Match(yourString, @"(?<=rom '( name "").*?(?="" size 'd+ crc 2e2bf112)").Value;

  • 后面的(?<=rom '( name "")用作左边
  • 的分隔符
  • .*?延迟匹配字符到…
  • forward (?="" size 'd+ crc 2e2bf112)可以找到右
  • 分隔符的点
参考

  • 零长度断言的前向和后向
  • 掌握向前看和向后看

不要到处打听了,这会使工作更复杂,而且不会带来任何好处。让regex消耗尽可能多的字符串,并使用捕获组来提取您真正感兴趣的部分。

Regex r = new Regex(@"rom '( name ""(?<name>[^""]+)"" size 'd+ crc 2e2bf112'b");
Match m = r.Match(subjectString);
if (m.Success) {
    resultString = m.Groups["name"].Value;
}