我在生成适用于 Groovy 的正则表达式时遇到问题。
我的目标是:给定一个字符串,如:
/products/prodA/index-tab2.html
如果最后一个 / 之后的字符串包含“-tab”n“.html”,则获得一个返回匹配项的匹配项
我最初的尝试是
([^\/]+)(?<=-tab[0-9]\.html$)
我在http://gskinner.com/RegExr/上针对以下测试数据进行了测试:
/products/prodA/index-tab2.html
/products/prodA/index.html
/products-tab2/prodA/index-tab2.html
并在“index-tab2.html”上得到了匹配——到目前为止一切都很好(或者我认为如此)。
下一步是将其放入 Groovy:
log.info("KPF: pageName is ${pageName} ")
def matcher = pageName =~ /([^\/]+)(?<=tab[0-9]\.html$)/
if (matcher.matches()) {
log.debugEnabled && log.debug("KPF: Filename has tab = $filename")
} else {
log.debugEnabled && log.debug("KPF: Filename does not have tab")
}
但是,当我使用输入测试代码时
/products/prodA/index-tab2.html(没有尾随空格 - 已验证 - 但未在此示例中)
我得到以下记录:
2013-07-02~12:51:10 INFO (xxx.site.controllers.PageController @ line 35) KPF: pageName is /products/prodA/index-tab2.html (xxx)
2013-07-02~12:51:10 DEBUG (xxx.site.controllers.PageController @ line 44) KPF: Filename does not have tab (xxx)
那么哪个正则表达式是“错误的”,我如何获得我需要的匹配?