Thread Mehrere verschachtelte Begriffe in einem String verändern (8 answers)
Opened by Gast at 2008-12-05 09:42

murphy
 2008-12-05 18:36
#116860 #116860
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Gast+2008-12-05 16:34:00--
[...]
Wenn "fall" in 'hereingefallen' gefunden wird, wird daraus "hereinge<b>fall</b>en". Jetzt wird aber "alle" nicht mehr gefunden, weil der html-Tag "alle" trennt - gleiches gilt für "len".
Das ist mein Problem.
[...]


Ich würde ja mal die Anforderungen an das Resultat überdenken: Es ist in HTML – bzw. generell in SGML – zwar möglich, Tags zu schachteln, aber nicht überlappende Tags zu erzeugen.

Wenn man in "hereingefallen" also sowohl "fall" als auch "alle" markieren möchte, dann kann man das unmöglich so tun, dass beide markierten Strings jeweils der Inhalt eines eigenen Tags sind. Man könnte hingegen sinnvoll so markieren, dass bei "hereingefallen" mit Suchbegriffen "fall" und "alle" im Endeffekt "hereinge<b>falle</b>n" herauskommt, die Markierungen also quasi verschmolzen werden.

Um das zu realisieren, würde ich nicht direkt mit dem Substitutionsoperator arbeiten sondern mit dem Matchoperator die Positionsintervalle aller Treffer für die Suchbegriffe bestimmen (Stichworte pos, @-, @+), diese Intervalle falls sie überlappen oder aneinander angrenzen vereinigen und schließlich um den Text in jedem Intervall herum mittels substr die Markierungstags einsetzen.
When C++ is your hammer, every problem looks like your thumb.

View full thread Mehrere verschachtelte Begriffe in einem String verändern