我有这个非常具体的用例,我想检查一个字符串是否包含2个小写字母,由可变数字的数字和“-abc”连接。
“-abc”部分不能是变量,应始终为“-abc”。所以最后只有位数可以变化。
它可以是这样的:
AB123-ABC
或者像这样:
AB123456-ABC
或者甚至喜欢这样:
cd5678901234-ABC
我尝试了以下但它不起作用:
if (s.toLowerCase().matches("^([a-z]{2})(?=.*[0-9])-abc")) {
return true;
}
你是关闭而不是(?=.*[0-9])
使用\d*
匹配零个或多个数字或\d+
匹配一个或多个数字,所以你可以使用这个正则表达式^[a-z]{2}\d*-abc
if(s.toLowerCase().matches("^[a-z]{2}\\d*-abc")){
return true;
}
你不需要做if
声明。做就是了:
s.toLowerCase().matches("^[a-z]{2}\d+-abc")
因为它已经返回true
。请注意我的答案与上面的答案不同,因为它需要字母和-abc
之间的数字。
您要使用的正则表达式是:
/^[a-z]{2}[0-9]+-abc$/i
^
"+" means "at least 1"
这将恰好匹配两个字母,至少一个数字和一个尾随-abc
。
您还可以使用Pattern类创建单个Regex对象。然后,您可以使用Pattern.CASE_INSENSITIVE
标志来忽略大小写。