3

我有这个很长的 cfg 文件,我需要在其中找到以特定字符串开头的最新出现的行。cfg 文件的示例:

...
# format: - search.index.[number] = [search field]:element.qualifier
...    
search.index.1 = author:dc.contributor.*
...
search.index.12 = language:dc.language.iso
...
jspui.search.index.display.1 = ANY
...

我需要能够获得以 开头的行的最后一次出现search.index.[number],更具体地说:我需要那个数字。对于上面的代码片段,这个数字是12

如您所见,还有其他行也包含该模式,但我不想匹配那些。

我使用 Groovy 作为编程/脚本语言。

任何帮助表示赞赏!

4

3 回答 3

1

我认为您不应该这样做,但是...
如果您可以进行多行搜索(无论如何您必须在这里),唯一的方法就是向后读取文件。所以首先,用.*(om nom nom) 吃所有东西(如果你可以让点匹配所有东西,(?:.|\s)*如果你不能)。现在匹配你的模式search\.index\.(\d+)。并且您想在一行的开头匹配此模式:((?:^|\n)希望您没有使用一些不用\n作换行符的疯狂格式)。

所以...

(?:.|\s)*(?:^|\n)search\.index\.(\d+)

该号码应在第一个匹配组中。(用JavaScript测试

PS:我不知道groovy,如果它完全不合适,很抱歉。

编辑:
这也应该有效:

search\.index\.(\d+)(?!(?:.|\s)*?(?:^|\n)search\.index\.\d+)
于 2013-04-24T07:55:38.100 回答
1

试试这个作为你的表达方式:

^search\.index\.(\d+)/

然后使用 Groovy,您可以通过以下方式获得结果:

 matcher[0][0]

这是一个解释页面。

于 2013-04-24T07:58:07.983 回答
1

你有没有尝试过:

def m = lines =~ /(?m)^search\.index\.(\d+)/
m[ -1 ][ 1 ]
于 2013-04-24T07:58:50.587 回答