Я строю небольшую библиотеку Java, которая должна соответствовать единицам в строках. Например, если у меня «300000000 м / с ^ 2», я хочу, чтобы оно совпадало с «m» и «s ^ 2».
До сих пор я пробовал самые мыслимые (мной) конфигурации, похожие (надеюсь, это хорошее начало)
"[[a-zA-Z]+[\\^[\\-]?[0-9]+]?]+"
Чтобы уточнить, мне нужно что-то, что будет соответствовать letters[^[-]numbers]
(где [] обозначает необязательные части). Это означает: буквы, возможно, сопровождаемые показателем степени, который возможно отрицателен.
Я немного изучил регулярные выражения, но я не очень хорошо говорю, поэтому любая помощь будет принята с благодарностью!
Большое спасибо,
EDIT:
Я только что попробовал первые 3 ответа
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
и это не работает ... Я знаю код, который проверяет работу шаблонов, потому что если я попробую что-то простое, например, сопоставив "[0-9] +" в "12345", это будет соответствовать всей строке , Итак, я не понимаю, что все еще не так. Я пытаюсь изменить мои скобки для скобок, где это необходимо в данный момент ...
КОД, ИСПОЛЬЗУЕМЫЙ ДЛЯ ИСПЫТАНИЯ:
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());
}
}