Verwendung von (? S) wird die verursachen. Zeilenendmarke enthält Hier ein Beispiel:
def exp = /(?s)([A|a][P|p][P|p][R|r][O|o][V|v][E|e][D|d])(.*)/
def approve = '''approved my signature
Approved new signature
APPROVED old signature
apprOved'''
approve.find(exp)
EDIT: In der Lösung oben, es würde einfach alles aus dem ersten Fund bis zum Ende aus. Daher ist hier eine bessere Lösung (unter Verwendung von (i) als @cfric in den Kommentaren vorgeschlagen?):
def exp = /(?mi)^approved/
def approve = '''approved my signature
Approved new signature
APPROVED old signature
apprOved'''
def m = approve =~ exp
m.eachWithIndex{ match, idx ->
println "m[${idx}] = ${match}"
}
Ausgang:
m[0] = approved
m[1] = Approved
m[2] = APPROVED
m[3] = apprOved
Erklärung:
- (? m) - Modifizierer für mehrere Zeilen. In diesem Fall ist das "." würde nicht mit einem neuen Zeilenzeichen übereinstimmen. also würde jede Zeile separat überprüft werden.
- (i?) - Match Groß- und Kleinschreibung
- ^- Beginn einer
Linie
so dass jede Zeile, die mit "genehmigt" in jedem Fall Brief beginnt, würde diesen Ausdruck entspricht. Optional können Sie. * Am Ende hinzufügen: /(?mi)^approved.*/, um den Text nach. "genehmigt". in diesem Fall wäre die Ausgabe:
m[0] = approved my signature
m[1] = Approved new signature
m[2] = APPROVED old signature
m[3] = apprOved
Können Sie bitte ein Beispiel für einen Kommentar geben? –