重复正则表达式

我有一个要解析的日志文件。它是关于使用正则表达式获取方括号之间和“OK:”之后的值。问题是我不知道模式发生了多少次,我不能说每个代码有多长。所以我只能转述它被“[OK:”和“]”包围的事实。


到目前为止,我试图在这里使用这个模式作为正则表达式:


String ok_pattern = "(.*itId=<)(.{1,10})(>.*)(\\[OK:)(.{4,27})(].*)";

Pattern p_ok = Pattern.compile(ok_pattern);


String testString = "RANDOMTEXT itId=<1232> Code < [OK:AZ1000105]  [OK:10000006] [OK:F1000000007] > RANDOMTEXT";


Matcher m = p_ok.matcher(testString);

if(m.find()) {

    System.out.println(m.group(5));

}


但这仅适用于只有一个“[OK:...]”的情况。我在第5组之后尝试使用“*”和“+”,但我无法成功。我如何重复进行此操作并仍然捕获所有结果?


我的目标是使用正则表达式在“OK:”之后提取 itemId 和(char-)数字组合。因此,在此示例中,我想获取“1232”(ItemID)和“AZ1000105”,“10000006”,“F1000000007”。


我感谢每一个帮助!


明月笑刀无情
浏览 143回答 2
2回答

蛊毒传说

您的基本设置是正确的,但您的模式与理想模式有些偏差。尝试使用以下正则表达式模式:(?<=\[OK:)[^\]]+|(?<=itId=<)[^>]+这仍然使用一个观察,但它只断言前面的是 。然后,它甚至在不使用捕获组的情况下,匹配任何数量的字符,这些字符不是右方括号。这对应于您尝试查找的内容。交替项右侧的部分与值匹配。[OK:itIdString ok_pattern = "(?<=\\[OK:)[^\\]]+|(?<=itId=<)[^>]+";Pattern p_ok = Pattern.compile(ok_pattern);String testString = "RANDOMTEXT itId=<1232> Code < [OK:AZ1000105]&nbsp; [OK:10000006] [OK:F1000000007] > RANDOMTEXT";Matcher m = p_ok.matcher(testString);while (m.find()) {&nbsp; &nbsp; System.out.println(m.group(0));}1232AZ100010510000006F1000000007

猛跑小猪

如果你想捕获 中的数字,然后以该顺序捕获后面的内容,你可以利用锚点来断言上一场比赛结束时的位置。itId=<1232>OK:\G匹配第一个捕获组中的数字和第二个捕获组中的值:itIdOK:itId=<(\d+)>&nbsp;Code&nbsp;<&nbsp;|\G(?!^)\[OK:([A-Z0-9]+)\]\s*在爪哇:String&nbsp;ok_pattern&nbsp;=&nbsp;"itId=<(\\d+)>&nbsp;Code&nbsp;<&nbsp;|\\G(?!^)\\[OK:([A-Z0-9]+)\\]\\s*";解释itId=<(\d+)> Code <匹配第一部分并在组 1 中捕获 1 位以上数字|或\G(?!^)上一场比赛结束,而不是在开始时\[OK:([A-Z0-9]+)\]\s*Match ,然后在组 2 中捕获您的值并进行匹配,后跟 0 个以上的空格字符[OK:]正则表达式演示|Java 演示请注意,如果要匹配更多,也可以使用否定字符类来匹配而不是方括号([A-Z0-9]+)([^]]+)例如,您可以检查组是否存在:String ok_pattern = "itId=<(\\d+)> Code < |\\G(?!^)\\[OK:([^]]+)\\]\\s*";Pattern p_ok = Pattern.compile(ok_pattern);String testString = "RANDOMTEXT itId=<1232> Code < [OK:AZ1000105]&nbsp; [OK:10000006] [OK:F1000000007] > RANDOMTEXT";Matcher m = p_ok.matcher(testString);while(m.find()) {&nbsp; &nbsp; if (null != m.group(1)) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("itId: " + m.group(1));&nbsp;&nbsp;&nbsp; &nbsp; }&nbsp; &nbsp; if (null != m.group(2)) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Ok code: " + m.group(2));&nbsp; &nbsp;&nbsp; &nbsp; }&nbsp; &nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java