3

I have a little problem. I have a text that i have to read in browser several time. Everytime, I open this text, automatically start a replaceAll that i wrote. It's very simple, basic but that problem is that when i do replace next time (every time i read this text) i have a replaceAll of replaceAll. For example i have in the text:

XIII

I want to replace it whith

<b>XIII</b>

with:

txt.replaceAll("XIII","<b>XIII</b>")

The first time it's everything fine, but then, when i read again the text, it become:

<b><b>XIII</b></b>

It's a stupid problem, but i start now with Java. I read that is possibile use regex.Could someone post a little example?

Thanks, and excuse me for my poor english.

4

3 に答える 3

3

すでにマークアップされた文字列との一致を防ぐには、否定的な後読みが必要です。

txt.replaceAll("(?<!>)XIII","<b>XIII</b");

この式は少し複雑に見えますが、分解すると次のようになります。

  • (?<! ... )否定後読みのテンプレートです。
  • >文字列の前に出現しないことを確認したい特定の文字です。

また、正規表現を使用して HTML を修正すると、通常、さらに別の特殊なケースを処理するために正規表現をアップグレードする悪魔のようなサイクルになり、次のケースで失敗するだけであることも警告する必要があります。それは、改善どころか、誰も読めない怪物になってしまいます。

于 2013-02-06T12:02:56.407 に答える
1

本当に速い解決策があります。自分で行う前に、反対の置換を行います。

私に見せてください:

txt.replaceAll("<b>XIII</b>","XIII").replaceAll("XIII","<b>XIII</b>")

したがって、最初に<b>を通常に戻してから で元に戻すと<b>、新しいレベルの を追加せずに同じ結果が得られ<b>ます。

于 2013-02-06T12:04:17.873 に答える
-1

これはどうですか:

txt = txt.replaceAll ("XIII", "<b>XIII</b>").
    replceAll ("<b><b>", "<b>").replaceAll ("</b></b>", "</b>");

HTMLにはあまり意味がないと思うので、他の箇所でも重複を取り除いていただいても結構<b><b>です。</b></b>

于 2013-02-06T12:06:50.573 に答える