下面的两个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
===