RegExpr输出不正确

时间:2017-04-20 21:40:25

标签: java regex string pattern-matching regex-group

我试图从字符串中获取所有输出,我希望使用匹配器匹配模式,但是,我不确定字符串或我的模式是否正确。我试图获得(服务器:切换)作为第一个模式,依此类推等等,但是,我只得到最后三个模式,因为我的输出显示。我的输出如下,代码如下

found_m: Message: Mess                                                                                                                          
found_m: Token: null                                                                                                                            
found_m: Response: OK

这是我的代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "Server: Switch\nMessage: Mess\nToken: null\nResponse: OK";
      String pattern = "([\\w]+): ([^\\n]+)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
        while(m.find()) {
            System.out.println("found_m: " + m.group());
        }
      }else {
         System.out.println("NO MATCH");
      }
   }
}

我的字符串是不正确还是我的字符串模式我没有做regexpr错误?

提前致谢。

2 个答案:

答案 0 :(得分:2)

你的正则表达式几乎正确。

问题是您是否曾两次致电.gitignore:第一次处于find状态,然后又一次处于if

您可以改为使用while循环:

do-while

对于正则表达式部分,您可以使用此进行小修正:

if (m.find( )) {
   do {
        System.out.println("found_m: " + m.group());
   } while(m.find());
} else {
    System.out.println("NO MATCH");
}

如果您不需要2个捕获组,请使用:

final String pattern = "(\\w+): ([^\\n]+)";

因为不需要在final String pattern = "\\w+: [^\\n]+";

周围使用字符类

答案 1 :(得分:0)

我不熟悉Java,但这个正则表达式模式应该可以捕获每个组并匹配。

([\w]+): (\w+)(?:(?:[\\][n])|$)

它基本上表示捕获后跟冒号和空格的单词,然后在字符串的\ n或结尾之前捕获下一个单词。

祝你好运。