我想检查一个匹配格式“=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 仅在输入的开头锚定正则表达式。