2011-12-23 1 views
0

正規表現をまとめようとしていますが、ターゲットが見つからないようです。前に単純な正規表現を使ったことがありますが、否定はいつも私を上にしています。正規表現 - 行の末尾にあるすべてのcharパターンに一致する

Hello, World! [strip this] 

それは一致する必要があり:

Iは、[]

例両者の角括弧内に文字で終わる文字列の任意の部分を除いた文字列全体を一致させる必要があります

Hello, World! 

大括弧を含む開閉括弧の間にあるものはすべて削除してください。しかし、私は最後のセットと一致したいだけです。

したがって、次の例で、

Hello, [cold] World! [strip this] 

が去るなら、

Hello, [cold] World! 

答えて

1

あなたがここに否定する必要はありません。ただ、最後にあなたの正規表現をアンカー:何も\s*\[[^\]]+\]\s*$を置き換える:

[email protected] ~ $ perl -ne 's,\s*\[[^\]]+\]\s*$,,; print "Result: -->$_<--\n"' 
Hello, World! [strip this] 
Result: -->Hello, World!<-- 
Hello, [cold] World! [strip this] 
Result: -->Hello, [cold] World!<-- 
[email protected] ~ $ 
0
(.*)(\s*\[.*\]) 

をしたい部分はキャプチャグループに1になります。ここでのアクションでそれを参照してください:http://rubular.com/r/P9xczF2AVI

+0

なぜときにすべての入力をキャプチャキャプチャする必要があるのは最後ですか? – fge

+0

彼は終わりを望んでいない、彼は始まりが欲しい。そして、はい、あなたは2番目のグループの周りの括弧を取り除くことができました、私はちょうど2つの部分がキャプチャされていることを示すためにそれらを追加しました。 – ean5533

+0

いいえ、削除するには終了をキャプチャします。したがって、最初と一致する必要はありません!実際には、ここですべてをキャプチャする必要はありません。 – fge

関連する問題