我有这个非常长的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作为编程/脚本语言。
任何帮助表示赞赏!
答案 0 :(得分:1)
我认为你不应该这样做但是......
如果你可以进行多行搜索(无论如何你必须在这里),唯一的方法是向后读取文件。首先,用.*
(om nom nom)吃掉所有东西(如果你可以点数全部匹配,(?:.|\s)*
如果你不能。)现在匹配您的模式search\.index\.(\d+)
。并且您希望在一行的开头匹配此模式:(?:^|\n)
(希望您不使用某些不使用\n
作为新行字符的疯狂格式。)< / p>
因此...
(?:.|\s)*(?:^|\n)search\.index\.(\d+)
该号码应位于第一个匹配组中。 (Test in JavaScript)
PS:我不认识groovy,很抱歉,如果它完全不合适。 修改强>
这也应该有效:
search\.index\.(\d+)(?!(?:.|\s)*?(?:^|\n)search\.index\.\d+)
答案 1 :(得分:1)
答案 2 :(得分:1)
你试过了吗?
def m = lines =~ /(?m)^search\.index\.(\d+)/
m[ -1 ][ 1 ]