2014-08-28 15 views

Antwort

3

Sie müssen einfangende Gruppen verwenden. Sie können groovy Dokumentation darüber überprüfen:

http://groovy.codehaus.org/Tutorial+5+-+Capturing+regex+groups

Zum Beispiel können Sie diesen Code verwenden:

s = "This is a simple string 234 something else here as well 4334" 
regex = /([0-9]{3})/ 

matcher = (s=~ regex) 

if (matcher.matches()) { 
    println(matcher.getCount()+ " occurrence of the regular expression was found in the string."); 
    println(matcher[0][1] + " found!") 
} 

Als Randbemerkung:

m[0] is the first match object. 
m[0][0] is everything that matched in this match. 
m[0][1] is the first capture in this match. 
m[0][n] is the n capture in this match. 
+0

'matcher.matches zu tun()' ist für passende komplette Strings verwendet werden, eine andere Verwendung Syntax. Ich habe nur 'if (matcher.getCount> 0)' verwendet, um nach einer Übereinstimmung zu suchen. – arton

4

Sie etwas tun könnte, wie Dies.

def s = "This is a simple string 234 something else here as well 4334" 
def m = s =~ /[0-9]{3}/ 
(0..<m.count).each { print m[it] + '\n' } 

Output (Working Demo)

234 
433 
+0

Sollte es nicht 'm [it] [0]' sein? –

+0

Sorry, mein Fehler. Ich habe es mit der Regexp verwechselt, die Gruppen erfasst. Deine Lösung ist einfacher - Stimme ab :) Btw. Sie können die Übereinstimmungen mit: 'm.each {print it + '\ n'}' durchlaufen. –

+0

Wie kann ich sicherstellen, dass die Regex zumindest mit etwas übereinstimmt? Bevor ich durch den Matcher iteriere. – birdy

9

Es ist kürzer

def triads = s.findAll("[0-9]{3}") 

assert triads == ['234', '433'] 
+0

[Link zur Dokumentation] (http://groovy.codehaus.org/groovy-jdk/java/lang/String.html#findAll (java.lang.String)) –

Verwandte Themen