2017-12-21 4 views
0

Ich vergleiche Versionsnummern als String geliefert.Regex für spezifische Formulierung in String

Ich muss erkennen, ob eine Version eine Beta Mitteilung ist oder nicht, möchte ich, wenn Beta überprüfen, build oder b wird im letzten Teil der Version enthalten, und ich versuche zu mach das mit einer Regex.

Bis jetzt funktioniert es, aber sobald es einen Platz im Versionsteil gibt, tut es nicht.

Vielleicht hat jemand eine bessere Idee?

Meine regex so weit:

(\d+)(beta|build|b(\d*))? 

String Beispiele:

v1.23beta125 -> ok

v1.25.458 Beta 129 -> nicht erkannt

Beispielcode :

private Boolean getBeta(String str) { 

     boolean version = false; 
     Pattern p = Pattern.compile("(\\d+)(beta|build|b(\\d*))?"); 

     Matcher m = p.matcher(str); 

     if (!m.find()) { 

      return version; 

     } else 
      version = true; 

     return version; 
    } 

Antwort

0

Sie können auch die folgende Regex verwenden, die restriktiver ist: https://regex101.com/r/oLoVN3/2

benötigen Sie einen umgekehrten Schrägstrich \ für hinzufügen, bevor jeder Backslash \ zu verwenden, um:

v?\s*(\d+(\.\d*)*)+\s*(beta|build|b)\s*(\d+) 

auf regex101 Getestet es in deinem Code.

+1

Thx Allan, das gab mir eine Hind und es funktioniert. – Simon

+0

Gern geschehen! – Allan

0

Sie können Platz als optional nutzen (0 oder mehr)

diese regex Versuchen:

(beta|build|b)\s*(\d+) 
0

Ich meine, alles, was Sie wollen, ist nur zu finden, ob es eine b ist, beta oder build in der Versionsstring , Recht? contains kann das tun. Sie haben keine reguläre Ausdrücke brauchen :)

Nun, können Sie auch diese regex verwenden

build|beta|b 

Überprüfen Sie, ob find gibt true zurück.

Sie können auch die Option "Groß-/Kleinschreibung beachten" aktivieren.