1

[]の間にあるテキストを除外するために、正規表現を持つrubyスクリプトがあります。たとえば、次のとおりです。

[29-5-10 : 10.05 | key=3.6]

ファイル内に上記の式が存在するのは、正規表現が正常に機能する場合のみです。次の問題を解決する正規表現が必要です。

[29-5-10 : 10.05 | key=3.6]

[29-5-10 : 10.05 | key=3.6]

... bla ..bla ..bla

[29-5-10 : 10.05 | key=3.6]

私の正規表現は今です/\[(.*)\]/

4

2 に答える 2

2

次のように変更してみてください。

/\[([^\]]*)\]/

現在の動作の問題は貪欲であるため、最初から最後まで.*一致します。you に変更すると、 以外の文字のみが一致します。[].*[^\]]*]

の代わりに を使用することもできます.*?.*これは怠惰です (できるだけ少ない文字に一致します)。

于 2012-10-01T16:42:51.707 に答える
0

FJ が述べたように、貪欲でないマッチャーが必要です。

s = '[29-5-10 : 10.05 | key=3.6] [29-5-10 : 10.05 | key=3.6]'
m = s.scan( /\[([^\]]*)\]/ ).flatten
p *m

戻ります

"29-5-10 : 10.05 | key=3.6"
"29-5-10 : 10.05 | key=3.6"

ライブデモはこちら

于 2012-10-01T16:58:27.547 に答える