我正在构建一个小型 Java 库,它必须匹配字符串中的单元。例如,如果我有“300000000 m/s^2”,我希望它与“m”和“s^2”匹配。
到目前为止,我已经尝试过最能想象的(我自己)类似的配置(我希望这是一个好的开始)
"[[a-zA-Z]+[\\^[\\-]?[0-9]+]?]+"
为了澄清,我需要一些匹配的东西letters[^[-]numbers]
(其中 [ ] 表示非强制性部分)。这意味着:字母,可能后跟一个可能为负的指数。
我已经研究了一点正则表达式,但我真的不流利,所以任何帮助将不胜感激!
非常感谢你,
编辑: 我刚刚尝试了前 3 个回复
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
它不起作用......我知道测试模式的代码有效,因为如果我尝试一些简单的事情,比如在“12345”中匹配“[0-9]+”,它将匹配整个字符串。所以,我不明白还有什么问题。我正在尝试在目前需要的地方更改括号中的括号...
用于测试的代码:
public static void main(String[] args) {
String input = "30000 m/s^2";
// String input = "35345";
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
String regex10 = "[0-9]+";
String regex = "([a-zA-Z]+)(?:\\^\\-?[0-9]+)?";
Pattern pattern = Pattern.compile(regex3);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
System.out.println("MATCHES");
do {
int start = matcher.start();
int end = matcher.end();
// System.out.println(start + " " + end);
System.out.println(input.substring(start, end));
} while (matcher.find());
}
}