【发布时间】:2012-01-11 19:54:39
【问题描述】:
我有以下正则表达式(很长,我知道):
(?-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);
【问题讨论】:
-
可能是不正确的字符串转义?!
-
你能给出一个你的表达式应该匹配的字符串吗?
-
里面没有明显的损坏。问题可能出在使用它的 Java 代码上吗?例如,当
find是需要时,习惯于使用其他语言的正则表达式的人通常会在Java 中使用matches。如果您发布代码-sn-p,它可能会有所帮助。 (顺便说一句,你为什么使用这么多(?-mix:...)的实例?你没有使用^、$、字母、空格或#,即使你是,你也只需要整个正则表达式的一个实例。) -
好吧,你的 Java sn-ps 看起来也不错。唔 。 . .
source是什么样的?而且,我假设您发布的正则表达式是您从System.out.println(regex);(或等效)获得的? -
你应该看看你是否可以通过一次剥离一点点来将问题缩小到正则表达式的一部分。您还应该确认您正在搜索的字符串在两种语言中确实是相同的(例如,没有一些字符集搞砸之类的)。