regex für alle buchstaben, mehrfache verwendung von rechenzeichen usw.

Aeefire

Ensign
Registriert
Sep. 2010
Beiträge
186
Servus!

Ich steck ein bisschen fest:

Ich brauch ein regex, dass folgendes matched:
  • alle Buchstaben und Sonderzeichen
  • (2 oder) mehrfache Verwendung von Rechenzeichen ( +, - oder * )

meine Versuche scheiterten bisher kläglich, eienr davon wäre:
Code:
"[a-zA-Z]|\\+{2,}|\\-{2,}|[\\+\\-]|[\\-\\+]|[\\*\\+]|[\\+\\*]|[\\*\\-]|[\\-\\*]"

gewesen... hat das schonmal jemand gemacht oder kennt sich ein bisschen besser aus als ich und könnte mir tipps geben? ;) danke

derzeit markiert er mir alle rechenzeichen (auch wenn sie nur 1x vorkommen) ..
 
Zuletzt bearbeitet:
also grundsätzlich geht es eigentlich garnix ums matchen selbst sondern um ausfilterung von illegalen expressions innerhalb eines "taschenrechners":

die expressions sind z.b. folgendermaßen gegeben:

Code:
args[0] ="1";
args[1] = "+";
args[2] = "-3";
args[3] = "*";
args[4] = "4a";
args[5] = "++";
args[6] = "3";

args[4] und args[5] sollte er also per

Code:
for (int i = 0; i < args.length; i++){
        input[i] = input[i] .replaceAll(regex,"!!"); 
}
mit "!!" ersetzen..

die variable regex ist der regex-string.

das ganze ist btw java :)

edit: man müsste es vllt. umgekehrt angehen: es ist alles erlaubt was ein einzelnes rechenzeichen ist oder eine zahl..... hmm
 
Zuletzt bearbeitet:
Hancock schrieb:
Code:
[^0-9+-*/]|[+-*/].*[+-*/]

Code:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 7
[^0-9+-*/]|[+-*/].*[+-*/]


ich hab's jetzt folgender maßen probiert, aber das lässt wieder alle special characters zu:
Code:
	for (int i = 0; i < input.length; i++) {
			if (input[i].contains("++") || input[i].contains("+-")
					|| input[i].contains("-+") || input[i].contains("--")
					|| input[i].contains("*+") || input[i].contains("+*")
					|| input[i].contains("-*") || input[i].contains("*-")
					|| input[i].contains("**") || input[i].matches("[a-zA-Z]")) {
				
				System.out.println(ERROR_INVALID_ENTRY);
				return false;
			}

		}
 
Zuletzt bearbeitet:
Hancock schrieb:
Escaping hab ich jetzt nicht eingebaut...
Code:
[^0-9+\-*/]|[+\-*/].*[+\-*/]
=>
[^0-9+\\-*/]|[+\\-*/].*[+\\-*/]

er scheint mir dabei aber special characters zu zulassen...

achja konstrukte wie !* oder !123 dürften auch nicht drin enthalten sein.. ein taschenrechner eben..
 
tschuldigung, mein fehler. da war was bei der "implementierung" nicht in ordnung... klappt wirklich super! dankeschön :)

jetzt versuch ich nurnoch den regex-string zu verstehen und dann passts aber das schaff ich alleine denk ich.. danke!
 
hmmm danke nochmal: auf eins fehlt mir noch:
er soll auch matchen, wenn ein "*" vor einer zahl steht...
 
Zurück
Oben