2016-04-20 18 views
0

Ich sollte zwei Nummern größer als 0 von einem Leerzeichen getrennt entsprechenRegular Expression Java Muster

^\d+?\s\d+?$

ich versucht, aber es eindeutig nicht arbeiten dann sollte ich auch eine Zeichenfolge übereinstimmen, die mit # beginnt und endet mit # und innen sollte es eine festgelegte Menge an char sein, dass jede char sein kann, bestimmt durch eine Variable w - 2.

String regex = "#.{" + (w - 2) + "}$";

return Pattern.matches(regex, stringToMatch);

versuchte das, aber funktioniert nicht.

+1

Wenn Sie sagen "funktioniert nicht", was nicht funktioniert? Was ist Ihre Eingabe und was ist Ihre erwartete Ausgabe? – brso05

+1

'" #. {"+ (W - 2) +"} $ ";' sollte '" #. {"+ (W - 2) +"} # "sein;' ... – brso05

+0

das erste nicht selbst kompilieren, gibt es mir ungültige Escape-Sequenz und die zweite, wenn 'w = 4' es nicht erkennen' # gf # ' – Mattia

Antwort

0

Der effizienteste Weg (ich weiß;) eine von Null verschiedene Zahl übereinstimmen, während es eine gültige Zahl zu behaupten und damit für führende Nullen ist

\d*[1-9]\d* 

Dies stellt sicher, dass alle getesteten Zeichen sind Ziffern und mindestens einer von ihnen ist keine Null.

So Ihre erste Erklärung sollte wie

etwas sein
String regex = "^\\d*[1-9]\\d*\\s\\d*[1-9]\\d*$"; 

(Sie ähnliche Dinge mit Umsehen tun könnte, aber sie sind weniger wirksam -. Besonders für längere Zahlen)


Wie für den zweiten Teil Ihrer Frage, wie in den Kommentaren erwähnt, haben Sie die Endung # vergessen. Wenn es erlaubt werden, die von anderem Text vorangestellt und:

String regex = "#.{" + (w - 2) + "}#"; 

Wenn es der einzige Text sein soll:

String regex = "^#.{" + (w - 2) + "}#$"; 

Hoffnung, das hilft.

Grüße