2016-06-01 7 views
0

Ich versuche, mein Skript zu erhalten, um Kommentare zu akzeptieren, die "genehmigt" oder "Genehmigt" usw. sind. Wann immer ein Benutzer zustimmt, können sie eine Unterschrift im Kommentar haben, der das Skript verursacht nicht rennen.Regex in Groovy, um mehrere Zeilen zu akzeptieren

Hier ist mein regex so weit:

def regexStr = /^[A|a][P|p][P|p][R|r][O|o][V|v][E|e][D|d]?/ 

Wer weiß, was ich dies hinzufügen sollte es neue Linien akzeptieren haben?

Danke.

+0

Können Sie bitte ein Beispiel für einen Kommentar geben? –

Antwort

1

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 
+0

und (? I) würde es Fall insenstive machen – cfrick

+0

@cfrick ja. In meiner Bearbeitung enthalten. –