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

これをあなたの表現として試してください:

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

そして、Groovy を使用すると、次の方法で結果を取得できます。

 matcher[0][0]

解説ページはこちら。

于 2013-04-24T07:58:07.983 に答える
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

やってみました:

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