java正则表达式不起作用

时间:2012-11-26 15:50:01

标签: java regex

我正在尝试匹配来自用户的输入数据,并搜索此输入是否匹配。 例如,如果用户输入: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());

    }

感谢。

3 个答案:

答案 0 :(得分:3)

你真的不需要Regex。简单的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

答案 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";