Эта проблема была бы довольно сложной, и этот ответ является лишь примером.
Может быть, мы хотели бы выяснить, какие типы уравнений мы могли бы иметь, тогда мы бы начали разрабатывать некоторые выражения. Например, мы можем взглянуть на это:
([a-z]+)|([-]?\d+)|[-+*\/]
Или:
([a-z]+)|([-]?\d+)|([-+*\/])|(\(|\))
Пример
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "([a-z]+)|([-]?\\d+)|([-+*\\/])";
final String string = "2x+7\n"
+ "2sin(2x + 2y) = 2sin(x)*cos(2y) + 2cos 2x * 2sin 2y\n"
+ "2sin(2x - 2y) = -2tan 2x / cot -2y + -2cos -2x / 2sin 2y\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
RegEx Circuit
jex.im визуализирует регулярные выражения:
У меня действительно нет никаких предложений относительно того, как было бы лучше разработать решение для этой проблемы. Но, возможно, вы захотите сначала классифицировать ваши уравнения, а затем спроектировать некоторые классы / методы для обработки каждой интересующей категории, и там, где необходимо регулярное выражение, вы, вероятно, можете разработать одно / несколько выражений для желаемых целей, которые вы хотите достичь.