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 + "\"");
}
}
}
}
下面是一个更大场景的一部分,我正在尝试编写一个表达式来标识左操作数和后续运算符。
代码:
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 + "\"");
}
}
}
}