import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?P<timestamp>.{19})\\ \\[(?P<severity>\\w{4,6})\\]\n"
+ "\\ \\d+\\#\\d+:\\ (\\*\\d+\\ )?\n"
+ "(?P<err_msg>\n"
+ " (?:\\\"\\S+\\\"\\sis\\snot\\s)?\n"
+ " (?P<err_type>\\w+)[\\s(] \n"
+ " (?:requests,\\ excess:\\ (?P<err_rate>\\d+\\.\\d+)\n"
+ " \\ by\\ zone\\ \\\"(?P<err_zone>\\S+)\\\"\n"
+ " |.+?)\n"
+ ")\n"
+ "(?:\n"
+ " ,\\ client:\\ (?P<remote_addr>\\d+\\.\\d+\\.\\d+\\.\\d+)\n"
+ " ,\\ server:\\ (?P<server>[^,\\a]+)\n"
+ " (?:,\\ request:\\ \\\"(?P<method>[A-Z]{3,4}?)\n"
+ " \\ (?P<uri>\\/\\S*?)(?P<uri_query>\\?\\S+)?\n"
+ " \\ (?P<protocol>\\S+)\\\"\n"
+ " )?\n"
+ " (?:,\\ upstream:\\ \\\"(?P<upstream>.+?)\\\")?\n"
+ " (?:,\\ host:\\ \\\"(?P<req_host>\\S+)\\\")?\n"
+ " (?:,\\ referrer:\\ \\\"(?P<referrer>\\S+)\\\")?\n"
+ "|)\n"
+ "$";
final String string = "2023/06/16 17:12:30 [error] 1814859#1814859: *228570402 limiting requests, excess: 50.120 by zone \"resizerzone\", client: 10.5.0.122, server: app.market.com, request: \"GET /resizer/view?key=8e158c8741ce849a09ef84d316bb68e7&b=productimages&f=webp&s=0 HTTP/1.1\", host: \"market.com\", referrer: \"https://market.com/\"\n";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS | Pattern.DOTALL);
final Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html