Java 正则表达式分别匹配字符串和子字符串

Java regex to match string and sub-string separately

下面是一个更大场景的一部分,我正在尝试编写一个表达式来标识左操作数和后续运算符。

代码:

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

public class RegExTest1 {

    public static void main (String args[] ) {

        String input[] = { "namein", 
                        "namenotin"};

        String operatorExpr = "(?<operator>(in)|(notin))";
        String conditionExpr ="(?<operand1>\S+)"+  operatorExpr;

        Pattern p = Pattern.compile(conditionExpr);

        for(String in: input) {

            Matcher m = p.matcher(in);
            if (m.find()) {

                String operand1 = m.group("operand1");
                String operator = m.group("operator");
                System.out.println("Input: \""+in + "\" | Operand1 : \""+ operand1 + "\"" + "| Operator : \""+ operator + "\"");

            }
        }

    }

}

实际输出:

Input: "namein" | Operand1 : "name"| Operator : "in"
Input: "namenotin" | Operand1 : "namenot"| Operator : "in"

预期输出:

Input: "namein" | Operand1 : "name"| Operator : "in"
Input: "namenotin" | Operand1 : "name"| Operator : "notin"

当我们有一个字符串和子字符串都与或“|”匹配时,我在这里写的表达式没有返回预期的输出量词

"in|notin"

一旦我确定两个匹配组像 "ein|notin" 一样相互排斥,就会返回预期值。

但要求是使其也适用于当前场景。

尝试关注

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

public class RegExTest1 {

    public static void main (String args[] ) {

        String input[] = { "namein", "namenotin"};

        String operatorExpr = "(?<operator>(in)|(notin))";
        String conditionExpr ="(?<operand1>\S+?)"+  operatorExpr;

        Pattern p = Pattern.compile(conditionExpr);

        for(String in: input) {

            Matcher m = p.matcher(in);
            if (m.find()) {

                String operand1 = m.group("operand1");
                String operator = m.group("operator");
                System.out.println("Input: \""+in + "\" | Operand1 : \""+ operand1 + "\"" + "| Operator : \""+ operator + "\"");

            }
        }

    }

}