Nessuna domanda su SO affronta il mio particolare problema. Conosco molto poco sull'espressione regolare. Sto costruendo un parser di espressioni in Java usando Regex Class per questo scopo. Voglio estrarre operandi, argomenti, operatori, simboli e nomi di funzioni dall'espressione e quindi salvare in ArrayList. Attualmente sto usando questa logicaEspressione regolare per estrarre gli operandi dall'espressione matematica
String string = "2!+atan2(3+9,2+3)-2*PI+3/3-9-12%3*sin(9-9)+(2+6/2)" //This is just for testing purpose later on it will be provided by user
List<String> res = new ArrayList<>();
Pattern pattern = Pattern.compile((\\Q^\\E|\\Q/\\E|\\Q-\\E|\\Q-\\E|\\Q+\\E|\\Q*\\E|\\Q)\\E|\\Q)\\E|\\Q(\\E|\\Q(\\E|\\Q%\\E|\\Q!\\E)) //This string was build in a function where operator names were provided. Its mean that user can add custom operators and custom functions
Matcher m = pattern.matcher(string);
int pos = 0;
while (m.find())
{
if (pos != m.start())
{
res.add(string.substring(pos, m.start()))
}
res.add(m.group())
pos = m.end();
}
if (pos != string.length())
{
addToTokens(res, string.substring(pos));
}
for(String s : res)
{
System.out.println(s);
}
uscita:
2
!
+
atan2
(
3
+
9
,
2
+
3
)
-
2
*
PI
+
3
/
3
-
9
-
12
%
3
*
sin
(
9
-
9
)
+
(
2
+
6
/
2
)
problema è che ora espressione può contenere Matrix con il formato definito dall'utente. Voglio trattare ogni Matrice come un Operando o Argomento in caso di funzioni.
Ingresso 1:
String input_1 = "2+3-9*[{2+3,2,6},{7,2+3,2+3i}]+9*6"
uscita dovrebbe essere:
2
+
3
-
9
*
[{2+3,2,6},{7,2+3,2+3i}]
+
9
*
6
Ingresso 2:
String input_2 = "{[2,5][9/8,func(2+3)]}+9*8/5"
uscita dovrebbe essere:
{[2,5][9/8,func(2+3)]}
+
9
*
8
/
5
Ingresso 3:
String input_3 = "<[2,9,2.36][2,3,2!]>*<[2,3,9][23+9*8/8,2,3]>"
uscita dovrebbe essere:
<[2,9,2.36][2,3,2!]>
*
<[2,3,9][23+9*8/8,2,3]>
voglio che ormai ArrayList dovrebbe contenere ogni operando, operatori, argomenti, funzioni e simboli ad ogni indice. Come posso ottenere il risultato desiderato utilizzando l'espressione regolare. La convalida dell'espressione non è richiesta.
@trashgod I pensa che il link che hai fornito non sia rilevante per il mio problema. –