我尝试在SoapUI中学习groovy,现在我在groovy中遇到了正则表达式的问题。
我尝试在groovy中构建一个正则表达式来解析这个文本:
[EM6111949VA61 = cfefcgjnjcidaiieodmlgfijaiknankpiodhghbagndikijiieicfhiiiojmfcfgjjkokkoilinbkkedcaafplikgjhomkhnopjhfhpjgkadalbkeenengiapjpeaiemokenfckjbeho; 路径= / BLA / BLA;安全;仅Http]
结果必须是:
EM6111949VA61 = cfefcgjnjcidaiieodmlgfijaiknankpiodhghbagndikijiieicfhiiiojmfcfgjjkokkoilinbkkedcaafplikgjhomkhnopjhfhpjgkadalbkeenengiapjpeaiemokenfckjbeho
我在SoapUI中的groovy源代码是:
erg='[EM6111949VA61=cfefcgjnjcidaiieodmlgfijaiknankpiodhghbagndikijiieicfhiiiojmfcfgjjkokkoilinbkkedcaafplikgjhomkhnopjhfhpjgkadalbkeenengiapjpeaiemokenfckjbeho; path=/bla/bla; secure; HttpOnly]'
def muster = /(?<=\[)[\w]+=[\w]+/
(erg ==~ muster).each {
log.info "Muster $it"
}
log.info结果为:Muster false
我使用Expression ::
尝试文本(?<=\[)[\w]+=[\w]+ to http://www.regexe.de/
结果就是我需要的,
EM6111949VA61 = cfefcgjnjcidaiieodmlgfijaiknankpiodhghbagndikijiieicfhiiiojmfcfgjjkokkoilinbkkedcaafplikgjhomkhnopjhfhpjgkadalbkeenengiapjpeaiemokenfckjbeho
groovy
中的正确语法是什么非常感谢您的回答
迈克尔
答案 0 :(得分:2)
您的模式有效,但==~
运算符要求整个字符串与此模式匹配。您当前的正则表达式等于/^(?<=\[)[\w]+=[\w]+\z/
。
使用允许部分匹配的=~
,而不是==~
(需要完整字符串匹配)。
请注意,您可以将[\w]
写为\w
,因为\w
是唯一的&#34;原子&#34;在角色类中。
请参阅Groovy demo:
def erg='[EM6111949VA61=cfefcgjnjcidaiieodmlgfijaiknankpiodhghbagndikijiieicfhiiiojmfcfgjjkokkoilinbkkedcaafplikgjhomkhnopjhfhpjgkadalbkeenengiapjpeaiemokenfckjbeho; path=/bla/bla; secure; HttpOnly]'
def regex = /(?<=\[)\w+=\w+/
def muster = erg =~ regex
(0..<muster.count).each { print muster[it] }
输出:
EM6111949VA61=cfefcgjnjcidaiieodmlgfijaiknankpiodhghbagndikijiieicfhiiiojmfcfgjjkokkoilinbkkedcaafplikgjhomkhnopjhfhpjgkadalbkeenengiapjpeaiemokenfckjbeho