我想检查一个匹配格式“=number”的字符串,例如“=5455”。
只要第一个字符是“=”并且子序列是[0-9]中的任何数字(不允许点),就会弹出“正确”消息。
if(str.matches("^[=][0-9]+")){
Window.alert("correct");
}
那么,这^[=][0-9]+是正确的吗?
如果不正确,您可以提供正确的解决方案吗?
如果它是正确的,那么你能找到更好的解决方案吗?
我不是正则表达式专家,比我更有知识的人可能会纠正这个答案,但是:
[=]而不是简单地使用没有意义=-该[...]块用于声明多项选择,为什么要声明一个字符的多项选择?^(如果您的输入字符串之前包含任何字符=,则无论如何它都不会匹配)。我不确定它的存在是否会使您的正则表达式更快、更慢或没有效果。总之,我会使用=[0-9]+
那应该是正确的,它正在寻找一个锚定在开头 = 符号,然后是 0-9 之间的 1 个或多个数字
您的正则表达式将起作用,即使它可以简化:
.matches()并没有真正进行正则表达式匹配,因为它尝试将所有输入与正则表达式进行匹配;因此不需要输入锚的开头;=.所以:
if (str.matches("=[0-9]+")) { ... }
如果要匹配仅以该正则表达式开头的字符串,则必须使用 a Pattern, aMatcher和.find():
final Pattern p = Pattern.compile("^=[0-9]+");
final Matcher m = p.matcher(str);
if (m.find()) { ... }
最后,Matcher还有.lookingAt()which 仅在输入的开头锚定正则表达式。