Reguläre Ausdrücke

  • Themenstarter Themenstarter Ganjafarmer1906
  • Beginndatum Beginndatum
G

Ganjafarmer1906

Gast
Hi,
stehe kurz vor der Verzweiflung weil ich es einfach nicht schaffe einen regulären Ausdruck zu erzeugen, welcher lediglich Bedingungen wie z.B. >5 oder <=5 zulässt.

Bisher habe ich:
Java:
bedingung.getText().matches("[<>][=]|[<][>]\\d{1,}");

ich weiß da fehlen noch einige Kombinationen aber es funktioniert ja nichtmal bis hierhin. Wenn ich nur den ersten Teil nehme, also das [<>][=] matcht er wunderbar auf alle Kombinationen davon. Wenn ich jetzt aber den zweiten Teil [<][>] mit der oder-Bedingung dahinter füge, ist z.B. >=5 false, obwohl es vorher noch true war. Da die Ausdrücke ja aber mit einem oder verknüpft sind, sollten das was vorher ging doch aber dannach auch noch funktionieren.


Hoffe ich hab mich halbwegs verständlich ausgedrückt und ihr könnt mir dabei helfen.
 
Hi,
stehe kurz vor der Verzweiflung weil ich es einfach nicht schaffe einen regulären Ausdruck zu erzeugen, welcher lediglich Bedingungen wie z.B. >5 oder <=5 zulässt.
Manchmal hilft ja lesen in der API weiter, oder googeln zum Thema "Wildcards in regulären Ausdrücken". Dann wäre rausgekommen, dass es auch ohne
Code:
|
geht und für
Code:
{1,}
eine Kurzschreibweise existiert: "[<>]=?\\d+".

PS: zwischen Operator und Zahl könnten noch beliebig viele Leerzeichen und/oder Tabs stehen...

bye
TPD
 
was sollte auch [<][>] bedeuten? da müssten ja beide Zeichen kommen, ein [] mit nur einem Zeichen darin ist ganz schön fragwürdig,
zuvor hast du doch schon [<>]

desweiteren wird blind darauf verlassen, dass | genau das gewünschte tut, wie wäre es mit Klammern oder Tests?
 
Erstmal danke für die schnelle Hilfe aber sowas ähnliches hatte ich auch schon gebaut, allerdings fehlt mir da das ungleich, also sowas wie >< oder <> oder meinetwegen /= . Deshalb bin ich ja zu dem | übergegangen weil wenn ich jetzt das / als erstes Zeichen mit erlaube, dann funktioniert auch z.B. /5 was ja keinen Sinn ergibt und wenn ich als zweites Zeichen < oder > erlaube, dann funktioniert >> oder << was ja ebenfalls quatsch ist.

@Slater: Es sollen ja auch beide Zeichen kommen, also ein <> .
 
> @Slater: Es sollen ja auch beide Zeichen kommen, also ein <> .
wozu aber die eckigen Klammern? es kann doch eh nur für <> stehten, >< wäre wiederum anders

dein Regex ist im Grunda ab|cde, du willst dass | sich auf ab und cd bezieht,
das kann aber unmöglich sein, entweder ist die Bindung so schwach, dass nur zwischen b und c unterschieden wird,
oder auch das e gehört nun zum rechten Oder-Fall, die Mittelvariante ist ausgeschlossen

wie gesagt: teste alles intensiv, setze Klammern!
 
Bleiglanz, hast du lieber
Java:
if (str.matches(...)) {
    messages.add(new Message("bla bla validation bla"));
}
oder
Java:
if ((str.length > 1 && (str.startsWith(">")) || ...)) || ((str.length > 2 && (...) || ...)) {
    messages.add(new Message("bla bla validation bla"));
}
😉 ?

Sorry für den übermässigen Gebrauch von () :bae:
 
Nein, anstatt das mit dem ersten Zeichen wenn/dann zweites Zeichen Gewürge hätte ich gleich
Java:
Pattern.compile("^(<|>|<=|>=|=|<>){1}\\d+");
verwendet
 
[c]{1}[/c] ist schon mal überflüssig. Und [c]^[/c] macht IMHO gerade hier auch nur in Kombination mit [c]$[/c] Sinn, was für [c]matches()[/c] aber im Vergleich zu [c]find()[/c] überflüssig ist.
 

Zurück
Oben