RegExp

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
ich habe nun ca. 2h das Forum und das Internet durchsucht:

suche eine einfachen RegExp der false zurück gibt, wenn der eingegebene String Zahlen enthält:
der String kann beliebig Lang sein!
hier mein Anfang:

Code:
public static void isANumber(){
  /**
   * Auschließlich Zahlen von 0-9
   */ 
  boolean regex = Pattern.matches("d", "2");
  System.out.println(regex);

hierbei bekomme ich immer false zurück egal was ich eingebe! ???:L

danke für jede Hilfe :D
 

EOB

Top Contributor
hi, also das hier sollte funzen:

Code:
String s = "123abcd";
boolean b = s.matches(".*\\d+.*");

probier mal.

gruesse
 
S

SlaterB

Gast
bzw. einfach nur \\vergessen:
boolean regex = Pattern.matches("\\d", "2");
System.out.println(regex);
 
G

Guest

Gast
zu früh gefreut: :meld: :cry:


Code:
public static void main(String[] args) {
  isANumber("d22ds22d");
}

Code:
/**
	 * Rückgabewert -> false wenn Buchstaben enthalten sind
	 * Rückgabewert -> true wenn NUR Zahlen enthalten sind
	 * @param eingabe
	 * @return
	 */
	public static boolean isANumber(String eingabe){
		/**
		 * Auschließlich Zahlen von 0-9
		 */
		boolean regex1 = eingabe.matches(".*\\d+.*");
		System.out.println("regex1 " + regex1);
		boolean regex = Pattern.matches("\\d", eingabe);
		System.out.println("regex " + regex);
		return regex;
	}

Nr.1 gibt bei dem oben eingegeben String immer noch true aus, obwohl Buchstaben mit dabei sind!
Nr.2 sobald mehr als 1 Zahl, gibt sie False zurück!

also beides leider noch nicht der gewünschte Erfolg
 

hupfdule

Top Contributor
Anonymous hat gesagt.:
Nr.1 gibt bei dem oben eingegeben String immer noch true aus, obwohl Buchstaben mit dabei sind!
Natürlich, danach hast du ja auch gefragt:

suche eine einfachen RegExp der false zurück gibt, wenn der eingegebene String Zahlen enthält:

Code:
"^\\d+$"
trifft nur zu, wenn ausschließlich Zahlen enthalten sind.

Nr.2 sobald mehr als 1 Zahl, gibt sie False zurück!

Auch das ist korrekt, der Ausdruck trifft nur bei einem einzelnen Zeichen zu.
 
G

Guest

Gast
Stimmt :cry: das war meine schuld!

es geht beides! aber das 1 ist sicherer :)
vielen dank!

wenn wir schon dabei sind. gibt es schon was fertiges für Datum?
sonst bau ich mir da was ^^

Format: yyyy-mm-dd hh:mm:ss

man muss sich ja nicht jede antwort direkt geben lassen man kann ja auch erst mal selbst versuchen :###
 
G

Guest

Gast
ich hatte die Fragestellung schlecht gestellt!

ich suchte ein RegExp der zurückgibt: wenn

* Rückgabewert -> false wenn Buchstaben enthalten sind
* Rückgabewert -> true wenn NUR Zahlen enthalten sind

dabei funktionierte deiner leider nicht :?
 

DaKo

Bekanntes Mitglied
Code:
try{
   Integer.parseInt(eingabe);
}catch(NumberFormatException e)
   return true;
}
return false;

Das ist die schlechteste Lösung, die mir eingefallen ist
 
G

Guest

Gast
Das ist die schlechteste Lösung, die mir eingefallen ist

das ist meine schlechteste Lösung: und mit dem Datum das kracht noch :roll:

Code:
public static void main(String[] args) {
	 isANumber("3232dsds");
	 checkDate("2006-12-07 13:39:15");
	}
	/**
	 * Mit RegExp Prüfen ob String das Format: yyy-mm-dd hh:mm:ss hat
	 * Rückgabewert -> false wenn Format nicht eingehalten
	 * Rückgabewert -> true, wenn oben genanntes Format zutrifft
	 * @param sDate
	 * @return
	 */
	public static boolean checkDate(String sDate){
		boolean regex = sDate.matches("^\\(d{4})-(d{1,2})-(d{1,2})[:space:](d{1,2}):(d{1,2}):(d{1,2})$");	
		System.out.println(regex);
		return regex;
	}
	/**
	 * Rückgabewert -> false wenn Buchstaben enthalten sind
	 * Rückgabewert -> true wenn NUR Zahlen enthalten sind
	 * @param eingabe
	 * @return
	 */
	public static boolean isANumber(String sEingabe){
		/**
		 * Auschließlich Zahlen von 0-9
		 */
		boolean regex = sEingabe.matches("^\\d+$");
		System.out.println("regex1 " + regex);
		return regex;
	}

Fehler:

Code:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 6
^\(d{4})-(d{1,2})-(d{1,2})[:space:](d{1,2}):(d{1,2}):(d{1,2})

Klammersetzung schon geprüft (oder wieder wirr im Kopf ^^)
kenn das nur aus JavaScript das ich immer wieder:

\d geschrieben habe.. aber dann mecker mein böses Java  ???:L 
      ^
	at java.util.regex.Pattern.error(Pattern.java:1650)
 
S

SlaterB

Gast
statt d brauchst du wieder \\d!

\d ist wiederum was ganz anderes, wäre eine Escape-Sequenz ähnlich \n für Zeilenumbruch,
ist aber in Java nicht definiert, daher generell vom Compiler verboten

------

und am Anfang hast du einmal \\(,
deshalb wird diese Klammer als normales Zeichen gewertet
und nicht als Klammer im Sinne der Pattern-Syntax,
welche einen bestimmten Teil des Patterns öffnet

daher beschwert sich der Pattern-Parser über die folgende schließende Klammer, ohne zuvor ein öffenende gesehen zu haben

wozu überhaupt Klammern?, die können wohl komplett raus
 

hupfdule

Top Contributor
Außerdem:

Code:
		boolean regex = sDate.matches("^\\(d{4})-(d{1,2})-(d{1,2})[:space:](d{1,2}):(d{1,2}):(d{1,2})$");

Das trifft dein Pattern sowieso nicht korrekt. Du erlaubst mit \\d{1,2} ein oder zwei Zeichen. Du würdest also ein Pattern "yyyy-m-d h:m:s" zulassen. Für das Jahr erlaubst du wiederum nur exakt 4 Zeichen. Etwas inkonsequent....
Lass dir mal etwas mehr Zeit für das Schreiben deiner Patterns. Dann passiert dir das nicht so leicht.
 

EOB

Top Contributor
probier mal...ohne testen

Code:
if(s.matches("^\\d+$")){
    true
}

if(s.matches("^[A-Za-z]+$")){
    false
}

gruesse
 
G

Guest

Gast
Kenn das nur aus JS das man die Klammern über $1 ansprechen kann und dann variieren kann!
sollte das der fall sein, das sich das Datum doch ändert bin ich flexibel.

ich versuch mal gerade eure Vorschläge umzusetzen gebt mir nen Moment zeit :)
 
G

Guest

Gast
Code:
boolean regex = sDate.matches("^\\d{4}-d{2}-d{2}[:space:]d{2}:d{2}:d{2}$");

werde das dann noch testen! nochmals danke für eure Hil :wink: fe! :!:
 
G

Gast

Gast
Sooo.. da bin ich wieder

Zitat:
Die Backslashes....

wenn ich ("\d{4}usw. schreibe dann meckert Java^^
aber funktionieren tut das so auch noch nicht :/
 

hupfdule

Top Contributor
Gast hat gesagt.:
wenn ich ("\d{4}usw. schreibe dann meckert Java^^

Richtig. Weil ein Backslash auch für Java ein besonderes Zeichen ist und daher maskiert werden muss. Also zwei Backslashes. Hättest du mal etwas mehr auf die Beispiele von uns geachtet, wäre dir das aber sicher aufgefallen. Und wenn du nicht verstehst, warum wir da immer zwei Backslashes gesetzt haben, dann frag nach.
So lange du nicht verstehst, was die regulären Ausdrücke bedeuten, wirst du nie die Fehler darin finden.


BTW: In deinem letzten Beitrag hast du die Backslashes korrekt angegeben. Nur eben hast du es nur am Anfang gemacht.

Um dich nicht selbst mit den vielen Backslashes zu verwirren, schreibe am besten erst mal den reinen regulären Ausdruck auf und, wenn du mit diesem zufrieden bist, dann maskiere alle Backslashes mit weiteren Backslashes.


Vlt. findest du im Internet auch irgendwo einen regex-tester. Dort könntest du deine erstellten Ausdrücke dann testen ohne noch die Maskierung für Java vornehmen zu müssen. Könnte für den Anfang einfacher sein.
Unter Linux gibts da bspw. prcetest.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D RegExp .txt-Datei einlesen Java Basics - Anfänger-Themen 6
L RegExp bzw Pattern in Java Java Basics - Anfänger-Themen 6
D Regexp einer Auflistung Java Basics - Anfänger-Themen 9
B RegExp in Java Java Basics - Anfänger-Themen 5
Y Regexp gesucht Java Basics - Anfänger-Themen 6
N Regexp Pattern & Matcher Problem Java Basics - Anfänger-Themen 4
R Regexp nur Buchstaben und Ziffener beliebig oft Java Basics - Anfänger-Themen 3
D Regexp Java Basics - Anfänger-Themen 3
D regexp-pattern .. letzter schliff Java Basics - Anfänger-Themen 6
M RegExp: String in Array Java Basics - Anfänger-Themen 7
Z regexp/pattern für dateipfad Java Basics - Anfänger-Themen 5
S RegEXP Java Basics - Anfänger-Themen 3
S Regexp Java Basics - Anfänger-Themen 4
K RegExp - Problem Java Basics - Anfänger-Themen 4
G JAVA: RegExp Java Basics - Anfänger-Themen 3
C regexp gibt immer false aus Java Basics - Anfänger-Themen 4
G Suche RegExp Java Basics - Anfänger-Themen 4
Y Hilfe bei Pattern-Regexp Java Basics - Anfänger-Themen 5
lhein RegExp - Frage Java Basics - Anfänger-Themen 6
M RegExp mit "Untergruppen" - wie komme ich an die? Java Basics - Anfänger-Themen 4
G Mittels RegExp "Variablen" extrahieren Java Basics - Anfänger-Themen 4
G Java Regex / Pattern etc. <-> Jakarta RegExp Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben