我有以下正则表达式(很长,我知道):
(?-mix:((?-mix:(?-mix:\{\%).*?(?-mix:\%\})|(?-mix:\{\{).*?(?-mix:\}\}?))
|(?-mix:\{\{|\{\%)))
我用来分割一个字符串。它在 C# 中正确匹配,但是当我将代码移至 Java 时,它不匹配。此正则表达式是否有任何仅适用于 C# 的特殊功能?
源代码生成为:
String source = Pattern.quote("{% assign foo = values %}.{{ foo[0] }}.");
在 C# 中它是:
string source = @"{% assign foo = values %}.{{ foo[0] }}.";
C#版本是这样的:
string[] split = Regex.split(source, regex);
在 Java 中我都试过了:
String[] split = source.split(regex);
还有
Pattern p = Pattern.compile(regex);
String[] split = p.split(source);
最佳答案
这是一个包含您的代码的示例程序:http://ideone.com/hk3uy
Java 和其他语言之间有一个主要区别:Java 不会将捕获的组作为标记添加到结果数组 (example) 中。这意味着所有定界符都从结果中删除,尽管它们将包含在 .Net 中。
我知道的唯一选择是不使用 split
,而是获取匹配列表并手动拆分。
关于c# - 正则表达式在 C# 中匹配,但在 java 中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362210/