正则表达式查找字符串对
描述:创建 groovy 代码和 gsp 模板中使用的所有 i18n 属性的列表
def properties = []
new File(".").eachFileRecurse {
if (it.file) {
switch (it) {
case ~/.*\.groovy/:
def matcher = it.text =~ /code:\s*["'](.*?)["']/
matcher.each { properties << it[1] }
break
case ~/.*\.gsp/:
def matcher = it.text =~ /code=["'](.*?)["']/
matcher.each { properties << it[1] }
break
}
}
}
println properties.sort().unique().join("\n")
我尝试通过以下方式扩展它。假设我们有一些消息属性,例如:
message(code: 'product.label', default: 'Product')
我们想要作为脚本的输出,例如:
product.label=Product
我尝试向正则表达式添加一些条件:
def matcher = it.text =~ /code=["'](.*?)["'] | default=\s*["'](.*?)["']/
并将其填充到属性中。但由于正则表达式找不到成对的“代码和默认”部分,因此这是行不通的。
知道如何更改正则表达式或整个脚本来执行此操作吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您的正则表达式不正确。对于以下消息方法调用:
它应该如下所示:
Your regular expression is incorrect. For the following message method call:
It should look like this:
除了像 Bunting 那样提供更好的正则表达式之外,我还发现了一个非常有用的 Grails 插件: message-reports
Aside from providing a better regex as bunting did, I found a pretty useful Grails plugin: message-reports
解决这个问题的更好的正则表达式是:
输出格式可以是
结果
the better regex to solve it is:
output format can be
results
我对这个脚本进行了一些研究,发现了一些需要注意的细节。我想查找带有和没有定义默认值的消息,并且我想找到非标记版本(即
${g.message(code:"the.code", default:"the.default"}
) 最好不要遍历文件的内容,而是逐行解析它,这是因为如果一行中有代码,我将(在第二步中)查看它是否有但不想将整个文件解析两次,
不能在一行中混合带有默认值的消息了。
这样我就
I worked a bit with this script and found some details that needed attention. I want to find messages with and without defined defaults and I want to find the non-tag verson (i.e.
${g.message(code:"the.code", default:"the.default"}
) as well.It seems good to not go over the file's content but parse it line by line. This is because iIf there is a code in a line, I'll (in a second step) take a look if it has a default. Don't want to parse the whole file twice though.
Like this I cannot mix messages with and without default in a single line. I can live with that for now.
Have fun!