2016-12-29 5 views
3

次の問題があります。私はサブ<back>以外<>終わり、で始まるすべてのサブストリングを削除したいです。JavaでRegExp以外のすべてのタグを置き換えます。

例:<apps> <up> <down> <capital> ...は削除する必要がありますが、<back>では削除しないでください。

これはRegExpString.replace()で動作すると確信していますが、わかりません。

現在、私はこれを考え出した:

line = line.replaceAll("<[^<]*>", ""); 

問題この<back> -substringを削除していること、です!

あなたの誰かが解決策を知りたがっていれば幸いです。

ありがとうございました!

答えて

4

あなたが(?!<back>)<[^<]*>使用することができ、

(?!<back>)line = line.replaceAll("(?!<back>)<[^<]*>", "");タグ<back>

RegEx Demo

+0

'(?!'の解決策は、単語「* back」で始まる単語「<...>」と一致しません。 –

+0

@WiktorStribiżewありがとう、私はそれを改善しました説明を書いてみましょう。 –

+0

速い回答をいただきありがとうございます。この方が効果的です。最初のものが他の文字を削除しました。RegExp-Demoは本当に役に立ちます! –

3

は否定先読みを使用します。

line = line.replaceAll("<(?!back>)[^<>]*>", ""); 
         ^^^^^^^^^ 

regex demoを参照してください。

パターンが一致した:

  • <から<シンボル
  • (?!back>) - それはゼロ幅アサーションである、back>(この負の先読みと続いていない、右側のテキストのための唯一のチェック現在位置が、テキストは消費されない)
  • [^<>]* - ゼロ以上>以外の文字と<
  • > - a >シンボル。
+0

は、このソリューションがどのような文字を削除したのと一致しない(先に負の表情)? '<'から '<' and '>'の両方を除いて最も近い '<'にマッチするように更新しました。 –

+0

@Michael Giererがここで更新を見てください –

関連する問題