正则表达式验证问题

时间:2015-09-04 11:55:50

标签: java regex

我需要验证并阻止为输入字符串输入' ='(等号),并使用正则表达式捕获它[=]*。但它也捕获了其他字符串。输入:2c450807-4a4c-4f18-bf4f-5a100ced87a0。以上正则表达式也捕获了这个字符串。 请帮帮我。

而且,任何人都可以解释为什么这个正则表达式没有抓住输入。我需要捕捉正则表达式中提到的特殊字符。

            final String REGEX="[.,%*$#@?^<!&>'|/\\\\~\\[\\]{}+=\"-]*";


            Pattern pattern = Pattern.compile(REGEX);
            Matcher matcher = pattern.matcher("2c450807-4a4c-4f18-bf4f-5a100ced87a0");

            if (matcher.matches()) {

                System.out.println("found");

            }
            else{

                System.out.println("not found!");
            }

这打印&#34;未找到!&#34;

2 个答案:

答案 0 :(得分:2)

我认为你遇到的问题是*量词允许前一个子模式出现0次。因此,[=]*匹配任何字符串。

您只需要使用

=

然后你will not match 2c450807-4a4c-4f18-bf4f-5a100ced87a0

另请注意,=不是特殊的正则表达式字符,您不需要将其转义,也不需要放入字符类以避免转义。

但是,正如在另一条评论中指出的那样,如果您不必使用“正则表达式”,只需检查字符串是否包含带有=的{​​{1}}。

答案 1 :(得分:2)

使用正则表达式时,您可能希望根据它们出现的次数查找项目:

如果您想匹配一个正好包含n符号的组(在您的情况下:Equal(=)),您可以执行以下操作:

(=){n}

ie:if {myVar === myValue)在n = 3时匹配

如果您想要匹配此符号一次或多次:

(=)+

即:if((myVar = myValue)或(myVar == myValue)或(myVar === myValue))

如果您想匹配可能出现的项目:

(=)*

ie:if(myVar&lt; myValue)

项目不需要出现在您的表达式中以进行检查。该值可以为0到n次。