正则表达式从字符串中获取username ='testuserMM'

时间:2015-07-10 14:57:10

标签: java regex

我试过这个正则表达式来捕获用户名

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' )

1 个答案:

答案 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