下面的兩個pattern(p1和p2)分別表明了(A or B) and (C or D)和(A and B) or (C and D)的跨行匹配結果,固然還能夠用正則表達式構建更復雜的pattern,但這個實例證實了Groovy具有跨行匹配複雜邏輯表達式的能力。 正則表達式
值得注意的是,多行匹配文本時須要在匹配字符串前加「(?ms)」。 閉包
該實例同時演示了Groovy閉包的使用方法。 源代碼 three
msg1 = '''one two three four 字符串
five six''' 方法
msg2 = '''Jan Feb Mar 源代碼
Apr May Jun''' 字符
msg3 = '''one two three 實例
Apr May Jun'''
msg4 = '''Jan Feb Mar
four five six'''
p1 = / (?ms) (two|Feb).*(five|May)/
p2 = / (?ms) (two.five)|(Feb.May)/
msgs = [msg1, msg2, msg3, msg4]
patterns = [p1, p2]
patterns.each { pattern->
println 'pattern is: '+pattern
msgs.each { msg->
println 'msg is: '+msg
println 'match result is:'
matcher = msg =~ pattern
if (matcher)
println "true"
else
println "false"
println '---'
}
println '==='
} 運行結果 pattern is: (?ms)(two|Feb).*(five|May)
msg is: one two three four
five six
match result is:
true
msg is: Jan Feb Mar
Apr May Jun
match result is:
true
msg is: one two three
Apr May Jun
match result is:
true
msg is: Jan Feb Mar
four five six
match result is:
true
===
pattern is: (?ms)(two.five)|(Feb.May)
msg is: one two three four
five six
match result is:
true
msg is: Jan Feb Mar
Apr May Jun
match result is:
true
msg is: one two three
Apr May Jun
match result is:
false
msg is: Jan Feb Mar
four five six
match result is:
false
===