Hallo,
es soll nichts ersetzt werden was zwischen < und > steht.
Ich habs jetzt hinbekommen, in dem ich mit einer for Schleife und substr() mir einfach jedes Zeichen der Zeile ansehe. wenn ein < kommt ignoriere ich einfach alles bis wieder ein > kommt.
sub tag_search{
my $l=length($text[$lcounter]);
my $i=0;
my $c=undef;
my $str=undef;
my $tagon=0;
my $startpos=0;
my $str1; my $str2;
for ($i=0;$i<=$l;$i++) {
$c=substr($text[$lcounter],$i,1);
if ($tagon && $c ne ">") {next;}
if ($tagon && $c eq ">"){$tagon=0;$startpos=$i+1;next;}
if (!$tagon && $c ne "<" && $i<$l) {$str.=$c;}
else {
$tagon=1;
if ($str=~/$miss/) {
if ($_[0] eq "all"){$str=~s/$miss/$change/g;}
else{$str=~s/$miss/$change/;}
$str1=substr($text[$lcounter],0,$startpos);
$str2=substr($text[$lcounter],$i,$l);
$text[$lcounter]=$str1.$str.$str2;
$i=length($str1.$str)-1;
$str=undef;$str1=undef;$str2=undef;
if ($_[0] ne "all"){last;}
$l=length($text[$lcounter]);
}else{$str=undef;}
}
}
}
Wie ich perl kenne wäre das auch einfacher gegangen. Aber ich bin da irgendwie nicht auf die Lösung gekommen. Mit regulären Ausdrücken habe ich zugegeben manchmal noch Probleme.
Aber trotzdem vielen Dank für deine Ausführungen.
Gruß.
Bitte zitiere vernünftig.
»» »» Stelle zuerst dein Problem logisch dar.
»» kann ich gar nicht glauben, dass das so kompiziert sein soll.
Es ist auch nicht kompliziert - nur möchte dir hierbei scheinbar keiner die Lösung vorkauen, sondern zeigen wie du selbst zu Lösung kommst.Beats hinweis, dass du dein Problem logisch darstellen sollst, ist imho äußerst hilfreich - das erkennt man am bisherigen Threadverlauf.
Erst schreibst du, du möchtest Strings innerhalb von HTML-Tags erkennen. Mein erster gedanke war "Du meinst HTML-Elemente" - aber es hat sich schnell rausgestellt, dass du wirklich Tags meinst.
Jetzt sagst du, du willst alles erkennen, was ausserhalb von HTML-Tags steht.
Ich frage mich, was ist mit Attributen?
<foo href="http://example.com/foo" title="Den Artikel 'foo' auf example.com" foo="bar">foo</foo>
>
> Angenommen du willst "foo" ersetzen - \_WAS\_ genau soll jetzt ersetzt werden?
>
> Innerhalb des Elements?
> `<foo href="http://example.com/foo" title="Den Artikel 'foo' auf example.com" foo="wert">bar</foo>`{:.language-xml}
>
> Innerhalb von Attributen:
> `<foo href="http://example.com/bar" title="Den Artikel 'bar' auf example.com" foo="bar">foo</foo>`{:.language-xml}
>
> Die Attributnamen?
> `<foo href="http://example.com/foo" title="Den Artikel 'foo' auf example.com" bar="foo">foo</foo>`{:.language-xml}
>
> Innherhalb bestimmter Attribute - z.b. "nicht das href-Attribut":
> `<foo href="http://example.com/foo" title="Den Artikel 'bar' auf example.com" foo="bar">foo</foo>`{:.language-xml}
>
> Es gibt noch weitere Möglichkeiten - aber ich lasse dich gerne selbst denken.
>
> Um einen Regulären Ausdruck zu erstellen ist es essentiell wichtig, eine exakte logische Vorstellung von dem zu haben, was man eigentlich will. Wenn man diese hat, prüft man anhand dieses logischen Musters alle Möglichkeiten, die dadurch entstehen können. Erst dann, baut man daraus den eigentlichen Ausdruck.
>
> Mit zunehmender Erfahrung kann man diese Schritte vereinen - aber eine genaue Dokumentation im Quellcode (was eine Funktion oder eine Regulärer Ausdruck tun soll) sollte immer vorhanden sein, damit man auch später noch weis, wie's gemeint war.