使用Java中的正则表达式贪婪搜索字符串模式

时间:2012-10-26 20:24:52

标签: java regex pattern-matching

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

这可以从以下示例中理解:

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,但>=运算符由于运算符>独立存在而被拆分。

我想以贪婪的方式评估条款(<|>|<=|=|>=),以便>=被视为单个实体,并且如果它们一起出现则被列为下载。

2 个答案:

答案 0 :(得分:2)

你可以尝试简化到

 pattern1 = Pattern.compile("(.*?)(>=?|<=?|=)(.*)");

答案 1 :(得分:1)

String testt = "4>=5";
System.out.println(testt.replaceAll("(.*?)(>=?|<=?|=)(.*)", "$1;$2;$3"));

易于理解,您将立即更换所有内容。你有一个错误会停止获得&lt; =如果它找到&lt;在它之前,所以只需将那些2&lt; =和&gt; =放在第一个位置。