我试图从字符串中获取所有输出,我希望使用匹配器匹配模式,但是,我不确定字符串或我的模式是否正确。我试图获得(服务器:切换)作为第一个模式,依此类推等等,但是,我只得到最后三个模式,因为我的输出显示。我的输出如下,代码如下
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错误?
提前致谢。
答案 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或结尾之前捕获下一个单词。
祝你好运。