繁体   English   中英

grok匹配模式的正则表达式

[英]Regular Expression for grok matching pattern

下面两行需要相同的Regex

  PieceID = NEW00000009

  piece_id="NEW00000009"

找到我的模式:

[pP]iece[_]*[iI][dD][" "]*=[" "]*["]*(?<PieceID>[A-Z0-9]["]*{11})"

您与良好模式相距不远,但是您需要进行一些澄清:

  • 使某些东西可选用? (表示{0,1} )而不是* (表示{0,} )。
  • 您无需将引号引起来,空格字符没有什么特别的。 甚至一个字符都很特殊,您也不需要用引号保护它。

您的模式可以这样写:

[pP]iece_?[iI][dD] *= *"?(?<PieceID>[A-Z0-9]{11})"?

您可以更加严格一些,避免匹配诸如piece_id=NEW00000009"类的东西:

[pP]iece_?[iI][dD] *= *("?)(?<PieceID>[A-Z0-9]{11})\\1

可选引号在组1中捕获, \\\\1是组1的反向引用

最后,如果将空格替换为\\\\s*\\\\s是任何空格的字符类)或仅允许水平白色的[^\\\\S\\\\r\\\\n]* ,则可以使其更加灵活-空间。

您需要担心此代码是否区分大小写,但我认为它会完成您要尝试执行的操作。

var s1 = "PieceID = NEW00000009";
var s2 = @"piece_id=""NEW00000009""";

var re = new Regex(@"^(PieceID|piece_id)\s*=\s*\""?(?<PieceID>[A-Z0-9]{11})\""?$");

Console.WriteLine(re.IsMatch(s1));
Console.WriteLine(re.IsMatch(s2));

输出:

True
True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM