我试过这个正则表达式来捕获用户名
highs\(\d+\)\[.*?\]\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\sftid\(\d+\):\s.
它不起作用。
<55>Mar 17 12:02:00 forcesss-off [Father][1x91422234][eee][hote] abcd(QlidcxpOulqsf): highs(23455814)[mothers][192.192.21.12] ftid(64322816): oops authentication failed with (http-commo-auth, username='testuserMM' password='********'congratulation-fakem='login' )
答案 0 :(得分:1)
你可以使用更简单的正则表达式:
\busername='([^']+)
请参阅demo,结果在第1组。
<强> REGEX 强>:
\b
- 字边界username='
- 文字字符串username='
([^']+)
- 包含我们的子字符串的捕获组,只包含一个或多个符号,而不包含单个撇号。<强>更新强>:
以下是获取所需文字的两种方法:
String str = "<55>Mar 17 12:02:00 forcesss-off [Father][1x91422234][eee][hote] abcd(QlidcxpOulqsf): highs(23455814)[mothers][192.192.21.12] ftid(64322816): oops authentication failed with (http-commo-auth, username='testuserMM' password='********'congratulation-fakem='login' )";
String res = str.replaceAll(".*\\busername='([^']+)'.*", "$1");
System.out.println(res);
String rx = "(?<=\\busername=')[^']+";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
while (m.find()) {
System.out.println(m.group());
}
请参阅IDEONE demo