2016-07-13 4 views
0
my_input_string = "something Apache/2.3.4 more stuff PHP/4.5.6 other stuff" 

Der Ausgang I aufnehmen möchten, ist 2.3.4 (es für 'Apache/' und ergreifen Sie die Version danach aussehen sollte. Die Versionsnummer kann wie 2.3 kürzer oder länger oder 2.3.4.5 (irgendeine Gruppe von Zahlen mit Punkten dazwischen.) Ich habe andere Artikel gesehen, aber der nächste hat 3 Ausgänge Ich will nur einenCapture-kurze oder lange Versionsnummern in einem String regex

Ich habe Google gesucht und RegEx101.com und RegExr Aber ich habe es gesehen: Apache\/(\d+\.)?(\d+\.)?(\*|\d+)$ aber es scheint 3 separate Ausgänge auszugeben und es funktioniert nur mit 2 und 3 Ziffern nicht 4 Ich habe versucht, die Klammer zu ändern, aber kein Glück.

Mein Endergebnis wird in einem Groovy-Skript sein.

Antwort

0

Betrachten Sie Folgendes.

Edit: Es fängt jetzt eine Ziffer, dann eine Gruppe von sich wiederholenden Ziffern und, wo die Gruppe null oder mehrere solcher Zeichen haben kann „“:

​def my_input_string = "something Apache/2.3.4 more stuff PHP/4.5.6 other stuff" 
def regex = /.*Apache\/(\d[\d\.]*) .*/ 
def matcher = (my_input_string =~ regex) 
println matcher[0][1]​ 
+0

das funktioniert! Vielen Dank. Ich bin neu im Groovy und lese "Groovy in Action" Buch, aber kannst du oder jemand erklären, was Matcher [0] [1] macht? Soweit ich weiß, ergreift es das erste und zweite Element in einem Array oder einer Liste, aber das ergibt für mich noch keinen Sinn. – user2274586

+0

Das ist eine separate Frage, aber die Operation = ~ gibt ein Matcher-Objekt zurück. Dies ist in java.util.regex.Matcher und wird mit Groovy-Methoden (d. H. Der GDK) erweitert. Beispiele sind hier: http://mrhaki.blogspot.ca/2009/09/groovy-goodness-matchers-for-regular.html –

+0

[0] [1] erhält nicht das erste und zweite Element. Normalerweise wird es für ein mehrdimensionales Array verwendet, man könnte also sagen, es würde Zeile 0, Spalte 1 erhalten. In diesem Fall jedoch nicht, sondern delegiert an die [getAt-Methode des Matcher] (http: //docs.groovy -lang.org/latest/html/groovy-jdk/java/util/regex/Matcher.html#getAt(int)). PS, ich hoffe, du liest die zweite Ausgabe, es ist viel aktueller als die erste Version. –