我需要验证并阻止为输入字符串输入' ='(等号),并使用正则表达式捕获它[=]*
。但它也捕获了其他字符串。输入: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;
答案 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
次。