Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种方法可以将regex分组为一个";或;陈述_Java_Regex - Fatal编程技术网

Java 是否有一种方法可以将regex分组为一个";或;陈述

Java 是否有一种方法可以将regex分组为一个";或;陈述,java,regex,Java,Regex,我读了关于正则表达式的教程。我尝试使用|(或)分组。(用括号())标记),如下所示: add (\\d+) to (\\d+)|(\\d+) plus (\\d+) 匹配文本的示例为“5加6”或“5加6” 然而,第二个选项“5+6”使用第3组和第4组,因为这是同一模式的一部分如果第二个选项匹配,是否可以“排除”前面的组? 显示所述问题的代码: package example.regex.tester; import java.util.regex.Matcher; import java.u

我读了关于正则表达式的教程。我尝试使用
|
(或)分组。(用括号
()
)标记),如下所示:

add (\\d+) to (\\d+)|(\\d+) plus (\\d+)
匹配文本的示例为“5加6”或“5加6”

然而,第二个选项“5+6”使用第3组和第4组,因为这是同一模式的一部分如果第二个选项匹配,是否可以“排除”前面的组?

显示所述问题的代码:

package example.regex.tester;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SmartMath {

    public static void main(String[] args) {

        String textToMatch = "5 + 6";

        Pattern add = Pattern.compile("add (\\d+) to (\\d+)|(\\d+) plus (\\d+)");

        Matcher additionMatcher = add.matcher(query);

        if (additionMatcher.matches() == true) {
            int a = Integer.parseInt(additionMatcher.group(1)); // Does not work because groups are numbered as 3 and 4 when "5 plus 6" is used.
            int b = Integer.parseInt(additionMatcher.group(2));

            System.out.println(a + b);

        }

        else {
            System.out.println("Text does not match.");
        }

    }

}

您只能在.NET中使用,而不能在Java中使用

您需要重新编写正则表达式,以便它只有2个组。例如

(?:add )?(\\d+) (?:to|plus) (\\d+)

(?:add)?
是可选的,然后我们匹配一个空格,然后匹配一个或多个数字,然后匹配“to”或“plus”,然后匹配一个空格,然后再匹配一个或多个数字。

在决定解析哪些数字之前,您可以始终检查是否存在组1和组2,或组3和组4…每当不确定并愿意转到堆栈时,我首先转到,至少它会提高你的测试速度。你只能在一个小时内完成。不是用Java。您需要重新编写正则表达式,如
(?:add)?(\\d+)(:to | plus)(\\d+)
。但为了确保您不会以
add123+321
结束,您可以在
add\\d+to\\d+\d+plus\\d+
格式中使用“向前看”并测试字符串是否为字符串,然后我阅读了答案。非常有创意的解决方案!我不确定这是否正确地解决了OP问题,因为看起来正确的字符串应该是
add(\\d+)to(\\d+)
(\\d+)plus(\\d+)
而不是
add(\\d+)plus(\\d+)