Java 我的正则表达式缺少什么来匹配?

Java 我的正则表达式缺少什么来匹配?,java,regex,Java,Regex,我有一个java正则表达式\matcher: private static final Pattern RC_COMMAND_PATTERN = Pattern.compile("^RC,([\\d]+),(.*)$"); 该代码: private Iterable<ClientCommand> tryToDeserializeNonProtocolBufferContent(byte[] content) { String body = "RC,200,OK

我有一个java正则表达式\matcher:

private static final Pattern RC_COMMAND_PATTERN = Pattern.compile("^RC,([\\d]+),(.*)$");
该代码:

   private Iterable<ClientCommand> tryToDeserializeNonProtocolBufferContent(byte[] content) {
        String body = "RC,200,OK\nBridgeToRes,UPDATEPROFILE,916,0";
        Matcher rcCommandMatcher = RC_COMMAND_PATTERN.matcher(body);
        if (!rcCommandMatcher.find()) {
            throw new IllegalArgumentException();
        }
...    
    }
private Iterable tryToDeserializeNonProtocolBufferContent(字节[]内容){
String body=“RC,200,确定\nBridgeToRes,UPDATEPROFILE,916,0”;
Matcher rcCommandMatcher=RC_COMMAND_PATTERN.Matcher(body);
如果(!rcCommandMatcher.find()){
抛出新的IllegalArgumentException();
}
...    
}
但是我看到执行达到了
rcCommandMatcher.find()==false


为什么我的匹配器失败了?

问题是默认情况下点无法匹配换行符

为此,您需要使用s修饰符(或DOTALL标志),例如:

private static final Pattern RC_COMMAND_PATTERN = Pattern.compile("^RC,([\\d]+),(?s)(.*)$");

您的模式可以这样写:

private static final Pattern RC_COMMAND_PATTERN = Pattern.compile("\\ARC,(\\d+),(.*)\\z", Pattern.DOTALL);

(由于
\d
已经是一个字符类,因此
\d
周围的括号是无用的。
\a
\z
代替
^
$
的使用不太含糊,因为
\a
\z
的含义不会改变任何模式(多行与否))

什么是
(*)
表示没有此标志?捕获除换行符以外的任何字符,零次或多次。@EladBenda:The
表示除换行符以外的任何字符
\n
模式。DOTALL
没有帮助。还不是match@EladBenda:问题不在于本例中的模式,而在于代码中的其他地方。您可以在这里看到一个工作演示:(单击Java按钮)
private static final Pattern RC_COMMAND_PATTERN = Pattern.compile("\\ARC,(\\d+),(.*)\\z", Pattern.DOTALL);