1

我有一个用例,我想在给定字符串中的 <、>、<=、>= 和 = 中搜索一个运算符,并将表达式分成两部分,即右表达式和左表达式,并在之前单独评估它们评估最终的条件运算符。

这可以从下面的例子中理解:

Pattern pattern1 = Pattern.compile("(.*?)(<|>|<=|=|>=)(.*)");
Matcher matcher2 = pattern1.matcher("4>=5");
while (matcher2.find()) {
        System.out.println(matcher2.group(1) + ";" + matcher2.group(2)+ ";" + matcher2.group(3));
}

输出:

4;>;=5

预期的输出是,4;>=;5但是由于操作员的独立>=存在,操作员被分裂了。>

我想以(<|>|<=|=|>=)贪婪的方式评估该子句,以便将其>=视为单个实体并在它们一起出现时被列出。

4

2 回答 2

2

你可以尝试简化为

 pattern1 = Pattern.compile("(.*?)(>=?|<=?|=)(.*)");
于 2012-10-26T20:30:09.097 回答
1
String testt = "4>=5";
System.out.println(testt.replaceAll("(.*?)(>=?|<=?|=)(.*)", "$1;$2;$3"));

易于理解,您将立即更换所有内容。你犯了一个错误,如果它在它之前找到一个 <= 就会停止获取,所以只需将这 2 个 <= 和 >= 放在第一位。

于 2012-10-26T20:32:48.860 回答