正则表达式在C#中匹配,但在java中不匹配

Tud*_*dor 6 c# java regex

我有以下正则表达式(很久,我知道):

(?-mix:((?-mix:(?-mix:\{\%).*?(?-mix:\%\})|(?-mix:\{\{).*?(?-mix:\}\}?))
|(?-mix:\{\{|\{\%)))
Run Code Online (Sandbox Code Playgroud)

我正在使用分割字符串.它在C#中正确匹配,但是当我将代码移动到Java时,它不匹配.这个正则表达式的任何特殊功能是C#-only吗?

来源如下:

String source = Pattern.quote("{% assign foo = values %}.{{ foo[0] }}.");
Run Code Online (Sandbox Code Playgroud)

在C#中它是:

string source = @"{% assign foo = values %}.{{ foo[0] }}.";
Run Code Online (Sandbox Code Playgroud)

C#版本是这样的:

string[] split = Regex.split(source, regex);
Run Code Online (Sandbox Code Playgroud)

在Java中我尝试了两个:

String[] split = source.split(regex);
Run Code Online (Sandbox Code Playgroud)

并且

Pattern p = Pattern.compile(regex);
String[] split = p.split(source);
Run Code Online (Sandbox Code Playgroud)

Kob*_*obi 4

这是包含您的代码的示例程序:http ://ideone.com/hk3uy

Java 和其他语言之间有一个主要区别:Java 不会将捕获的组作为标记添加到结果数组中(示例)。这意味着所有分隔符都将从结果中删除,尽管它们将包含在 .Net 中。
我知道的唯一选择是不使用split,而是获取匹配列表并手动拆分。