1

我想检查一个匹配格式“=number”的字符串,例如“=5455”。

只要第一个字符是“=”并且子序列是[0-9]中的任何数字(不允许点),就会弹出“正确”消息。

    if(str.matches("^[=][0-9]+")){
        Window.alert("correct");
        }

那么,这^[=][0-9]+是正确的吗?

如果不正确,您可以提供正确的解决方案吗?

如果它是正确的,那么你能找到更好的解决方案吗?

4

3 回答 3

2

我不是正则表达式专家,比我更有知识的人可能会纠正这个答案,但是:

  • 我认为使用[=]而不是简单地使用没有意义=-该[...]块用于声明多项选择,为什么要声明一个字符的多项选择?
  • 我认为您不需要使用^(如果您的输入字符串之前包含任何字符=,则无论如何它都不会匹配)。我不确定它的存在是否会使您的正则表达式更快、更慢或没有效果。

总之,我会使用=[0-9]+

于 2013-07-24T08:39:48.087 回答
0

那应该是正确的,它正在寻找一个锚定在开头 = 符号,然后是 0-9 之间的 1 个或多个数字

于 2013-07-24T08:32:41.870 回答
0

您的正则表达式将起作用,即使它可以简化:

  • .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 仅在输入的开头锚定正则表达式。

于 2013-07-24T08:37:53.017 回答