2017-12-22 4 views
-1

編集:私が正しく説明しなかったことは悪いです。テキストから最後のものを取り出すための正規表現

私の質問は、何かのように見えるテキスト文字列を持っていて、[ATTACH] ** [ATTACH]テキストをそのテキストの最後と最後に付けることですが、今では最後のものだけを選択しますそれが存在するかどうか、いつも最後にあったはずのテキストの間で選択すべきではありません。 何イムしようと、私は誰がどのように伝えることができる正規表現のサイトで多くのことを試みたが、いつも失敗していたテキスト

Gdfhbghuhcghbhhijb 
    [ATTACH=full]36[ATTACH] 
    [ATTACH]36[ATTACH] 
    foo 
    bar 
    foo 
    bar 
    foo 
    foobar foobaz [ATTACH]36[ATTACH] 

以下のいずれかを選択せず​​に、最後の1

[ATTACH]36[ATTACH]

を選択することです正規表現

+0

どの言語を使用していますか? –

+0

あなたの質問は明確ではありません説明してください –

+1

最初のものと最後のものの両方が同じに見える場合、最後のものを選ぶのはどのように重要ですか? – JBone

答えて

0

でそれを行うには、この正規表現を使用することができます。

(?sim)(?:\[ATTACH=full\]36\[ATTACH\])(?!.*?(?:\[ATTACH=full\]36\[ATTACH\])) 

次は動作するはずです、質問を編集した後here

+0

@alex - あなたはそれが動作していることを確認することができます –

+0

申し訳ありませんそれは私が正しく説明していないことが悪いです今あなたがそれを見ることができます – alex

0

更新を確認することができます。

(\[ATTACH]\d+\[ATTACH])(?!.*\[ATTACH]\d+\[ATTACH]) 

を正確に言語フラグ/sに応じて、最後[ATTACH=full]36[ATTACH]

(\[ATTACH=full]36\[ATTACH])(?!.*\1) 

を指定するように設定されなければならない正規表現マッチ、次の.も一致します\n

Perl例:

perl -0777 -nE 'say for /(\[ATTACH=full]36\[ATTACH])(?!.*\1)/gs' <<END 
[ATTACH=full]36[ATTACH] 
    [ATTACH=full]36[ATTACH] 
    [ATTACH]36[ATTACH] 
    [ATTACH=full]36[ATTACH] 
    [ATTACH=full]36[ATTACH] 
    [ATTACH=full]36[ATTACH] 
    [ATTACH]36[ATTACH] 
    foo 
    bar 
    foo 
    bar 
    foo 
    foobar foobaz 
END 

[ATTACH=full]36[ATTACH] 
+0

こんにちは、本当にありがとう私は正しく私がそれを説明しなかったしかし、それをもう一度見てください。 – alex

+0

最後の行に存在する場合、つまりfoobazの後にのみチェックしたいのですが、それ以外の場合は選択しないでください。 – alex

関連する問題