Java正则表达式可以';不起作用,但javascript可以起作用

Java正则表达式可以';不起作用,但javascript可以起作用,java,javascript,regex,Java,Javascript,Regex,我的java正则表达式是 Pattern compile = Pattern.compile("^((?:[^\\n]+\\n?)+)\\n*"); String a = "# clj-markdown\n\nA Clojure library designed to ... well, that part is up to you.\n\n## Usage\nFIX==ME==\n\n## License\n\nCopyright © 2015 FIXME\n\nDistributed und

我的java正则表达式是

Pattern compile = Pattern.compile("^((?:[^\\n]+\\n?)+)\\n*");
String a = "# clj-markdown\n\nA Clojure library designed to ... well, that part is up to you.\n\n## Usage\nFIX==ME==\n\n## License\n\nCopyright © 2015 FIXME\n\nDistributed under the Eclipse Public License either version 1.0 or (at\nyour option) any later version.\n";
System.out.print(compile.matcher(a));
System.out.print(compile.matcher(a).matches());
此输出为false,但我在javascript中的测试可以通过

/^((?:[^\n]+\n?)+)\n*/.text(b)
如何解决这个问题


这可能是java正则表达式与javascript正则表达式的区别。

\n?
之间的转换为
\n*
,因为
\n?
匹配可选的换行符,
\n*
匹配零个或多个换行符

String a = "# clj-markdown\n\nA Clojure";
System.out.print(a.matches("^((?:[^\\n]+\\n*)+)\\n*"));
正则表达式
^((?:[^\\n]+\\n?+)\\n*
失败的部分是
标记\n\nA
子字符串。ie,因为有两个换行符

String a = "# clj-markdown\n\nA Clojure";
System.out.print(a.matches("^((?:[^\\n]+\\n*)+)\\n*"));
(?:[^\\n]+\\n?
匹配到
标记\n
,并且输入字符串中的下一个字符是换行符,当您使此正则表达式重复一次或多次
(?:[^\\n]+\\n?)+
匹配可选换行符后,它将期望出现任何字符,但不是
\n
。但是后面有一个换行符,所以这使得正则表达式失败

仅当给定的正则表达式与整个输入字符串匹配时,java中的
matches
方法才会返回true

但是,如果给定的正则表达式从一开始就匹配(部分匹配或完全匹配,但必须从一开始就匹配),javascript中的
test
函数将返回
true
。除了完整的字符串匹配之外,它不会被删除

示例:

> /^[^\n]+\n/.test('foo\n\nbarbuz')
true
> /^[^\n]+\n/.test('\n')
false

尝试使用
模式.DOTALL
——不确定这是否有效。@Jongware它不会有帮助,因为op的正则表达式中没有一个点。谢谢,干得好。但是,你知道javascript为什么可以通过这个正则表达式。