【发布时间】:2012-10-26 20:24:52
【问题描述】:
我有一个用例,我想在给定字符串中的 、= 和 = 中搜索一个运算符,并将表达式分成两部分,即右表达式和左表达式并求值在评估最终的条件运算符之前分别对它们进行评估。
这可以从下面的例子中理解:
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,但 >= 运算符被拆分,因为运算符 > 独立存在。
我想以贪婪的方式评估子句 (<|>|<=|=|>=),以便 >= 被视为一个实体,如果它们一起出现,则会被列出。
【问题讨论】:
-
只要把它们按正确的顺序排列... (=|=|>|
-
@RobertHanson - 这很好。它有效,但是如果我从列表中获取这些运算符的列表怎么办。在那种情况下,我可能不确定顺序。如何使其独立于订单?
-
@RobertHanson:您应该将其发布为答案!
-
@AbhishekJain - 您可以先按长度对它们进行排序。例如。 Collections.sort(listOfOperators, lengthComparator),其中 lengthComparator 是 Comparator 的一个实例,已实现按长度排序。
-
@RobertHanson - 感谢您的建议,但我已经使用相同的技术实现了相同的功能。不管怎样,谢谢你发布这个。 :)
标签: java regex pattern-matching