(?s)を使用すると、の原因になります。ただ最後まで最初の発見から、すべてを選択することになり、それを上記の溶液に :
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)
編集:ここでは改行文字 を含めることは一例です。そのため、ここではよりよい解決策(?使用は、(i)のコメントで提案@cfricよう)です:
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}"
}
出力:
m[0] = approved
m[1] = Approved
m[2] = APPROVED
m[3] = apprOved
説明:
- (M?) - 複数行のサポート修飾子。その場合、 '。'改行文字と一致しません。どのラインも別々にチェックされます。
- (I?) -^
- 小文字を区別しないマッチケース - ライン
の先頭ので、任意の文字の場合には「承認」で始まる各行は、その式に一致します。 オプションで、。*を最後に追加することができます。/(?mi)/approved.*/後のテキストと一致させます。 "承認された"。その場合の出力は次のようになります。
m[0] = approved my signature
m[1] = Approved new signature
m[2] = APPROVED old signature
m[3] = apprOved
コメントの例を挙げてください。 –