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

标签 c# java regex

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

(?-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/

相关文章:

c# - 从文件夹中的图像列表显示图像 C# UWP

c# - 将 JavaScript 正则表达式转换为 C#

python - `error: unbalanced parenthesis` 检查项目是否出现在 pandas 数据框中

c# - 过滤一组包含其他短语的所有短语的算法

java - matcher.find() 有什么问题?

java - 在 Java 中使用默认构造函数扩展类

Javascript:从字符串中提取日期?

c# - 如何检查每个列表成员的属性值是否相同

c# - EdsCreateImageRef() 方法给出 EDS_ERR_FILE_FORMAT_UNRECOGNIZED

c# - 限制 wpf 中的附加依赖属性