我有以下正则表达式(很久,我知道):
(?-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)
这是包含您的代码的示例程序:http ://ideone.com/hk3uy
Java 和其他语言之间有一个主要区别:Java 不会将捕获的组作为标记添加到结果数组中(示例)。这意味着所有分隔符都将从结果中删除,尽管它们将包含在 .Net 中。
我知道的唯一选择是不使用split,而是获取匹配列表并手动拆分。