1

我正在尝试匹配来自用户的输入数据并搜索此输入是否匹配。例如,如果用户输入:A*B*C* 我想搜索所有以 A 开头并包含 B 和 B 的单词我尝试了这段代码,但它不起作用:(get output false)

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());

    }

谢谢。

4

3 回答 3

3

您在这里并不需要正则表达式。简单String的类方法将起作用:-

String str = "AfasdBasdfCa";

if (str.startsWith("A") && str.contains("B") && str.contains("C")) {
    System.out.println("true");
}

请注意,这并不能确保您的BC处于特定顺序,我假设您不需要,因为您没有提及任何相关内容。

如果您希望它们按某种顺序排列(就像B之前一样,请C使用此正则表达式:-

if (str.matches("^A.*B.*C.*$")) {
    System.out.println("true");
}

请注意,.将匹配除 之外的任何字符newline。所以,你可以用它代替[^\r\n],它更清楚。并且您需要使用量词*,因为您需要匹配之前BC找到的任何重复字符。

此外,String.matches匹配完整的字符串,因此匹配anchors末尾。

于 2012-11-26T15:54:43.177 回答
2

您需要在字符类中添加量词;

String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$";
于 2012-11-26T15:54:04.330 回答
2

我认为您应该*像这样在您的正则表达式中使用修饰符(对于 A 和 B 之间以及 B 和 C 之间的 0 个或多个匹配项):

String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C";

编辑:您似乎正在处理来自用户的输入,用户可以*在输入中使用星号。如果是这种情况,请考虑:

String envVarRegExp = userInput.replace("*", ".*?");

userInput像这样的字符串在哪里:

String userInput = "a*b*c*d*e";
于 2012-11-26T15:54:11.987 回答