我正在尝试匹配来自用户的输入数据,并搜索此输入是否匹配。 例如,如果用户输入:A * B * C * 我想搜索以A开头并包含B和B的所有单词 我试过这个代码而且它不起作用:(得到输出错误)
public static void main(String[] args)
{
String envVarRegExp = "^A[^\r\n]B[^\r\n]C[^\r\n]";
Pattern pattern = Pattern.compile(envVarRegExp);
Matcher matcher = pattern.matcher("AmBmkdCkk");
System.out.println(matcher.find());
}
感谢。
答案 0 :(得分:3)
你真的不需要Regex。简单的String
类方法将起作用: -
String str = "AfasdBasdfCa";
if (str.startsWith("A") && str.contains("B") && str.contains("C")) {
System.out.println("true");
}
请注意,这并不能确保您的B
和C
按特定顺序排列,我认为您不需要,因为您没有提及任何相关内容。
如果您希望它们按某种顺序排列(例如B
C
之前,请使用此正则表达式: -
if (str.matches("^A.*B.*C.*$")) {
System.out.println("true");
}
请注意,.
将匹配除newline
之外的任何字符。因此,您可以使用它代替[^\r\n]
,它更清晰。您需要使用量词*
,因为您需要在找到B
或C
之前匹配任何重复的字符。
此外,String.matches
匹配完整字符串,因此最后匹配anchors
。
答案 1 :(得分:2)
您需要为字符类添加量词;
String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$";
答案 2 :(得分:2)
我应该在你的正则表达式中使用*
修饰符(对于A和B之间的0或更多匹配,然后是B& C之间的匹配):
String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C";
编辑:您似乎正在处理来自用户的输入,用户可以在输入中使用星号*
。如果是这种情况,请考虑一下:
String envVarRegExp = userInput.replace("*", ".*?");
userInput
是这样的字符串:
String userInput = "a*b*c*d*e";