首页 > 解决方案 > 如何检查带有整数的字符串是否与 Java 中的特定模式匹配?

问题描述

我只希望在我的方法中允许使用具有非常特定格式的字符串。格式为“Intx^Int”。下面是一些具体的例子:

我尝试了以下代码,但它似乎无法正常工作:

import java.util.regex.Pattern;

Pattern p = Pattern.compile("\\dx^\\d");
System.out.println(p.matcher("14x^-12").matches());

标签: javaregex

解决方案


您只匹配一个数字(不是整数),前面没有任何符号(似乎您想匹配-数字前面的可选字符)。您也未能转义^作为特殊正则表达式元字符的字符,它表示字符串的开头(如果Pattern.MULTILINE使用选项,则为行)。

您可以使用

Pattern p = Pattern.compile("-?\\d+x\\^-?\\d+");
System.out.println(p.matcher("14x^-12").matches());

模式匹配

  • -?- 一个可选的-
  • \d+- 一位或多位数字
  • x- 一个x - \^- 一个^字符
  • -?- 一个可选的-
  • \d+- 一位或多位数字

要支持带分数的数字,您可以进一步调整正则表达式:

Pattern p = Pattern.compile("-?\\d+(?:\\.\\d+)?x\\^-?\\d+(?:\\.\\d+)?");
Pattern p = Pattern.compile("-?\\d*\\.?\\d+x\\^-?\\d*\\.?\\d+");

另外,请参阅合理地解析科学记数法?.


推荐阅读