2016-06-01 47 views
0

"承認済み"または "承認済"などのコメントを受け入れるようにスクリプトを作成しようとしています。ユーザーが承認するたびに、スクリプトに原因となっているコメントに何らかの署名がある可能性があります。走りません。ここで複数行を受け付ける正規表現

は、これまでの私の正規表現です:

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

は、私はそれが新しい行を受け入れるには、このに追加すべきか誰もが知っていますか?

ありがとうございました。

+0

コメントの例を挙げてください。 –

答えて

1

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

と(?i)は大文字と小文字を区別しません。 – cfrick

+0

@cfrickはい。私の編集に含まれています。 –

関連する問題