VB HTML Ausschnitt sinnvoll parsen

semmelkuh

VerwirrterBenutzer
ID: 188086
L
28 April 2006
558
30
Hallo,

ich muss eine Information aus einem Batzen HTML Code auslesen.

So in etwa sieht der HTML Ausschnitt aus:

Code:
[...]
<tag1>[I]eindeutigesWort[/I]</tag1>
<tag2><a href="https://www.example.com/[I][immer andere Daten hier][/I]">[B]Information[/B]</a></tag2>
[...]

Problem an der Sache ist, dass ich die entsprechende Stelle nicht genau identifizieren kann.
Wie man oben sieht kommt sich die Information nach dem Tag1, welches ich eindeutig erkenne. Dann folgt Tag2, welcher mehrfach auf der Seite zu finden ist und nicht eindeutig ist. Der Link ist auch immer anders, sodass ich mich daran auch nicht orientieren kann. Letzendlich befindet sich zwischen zwei A-Tags die gesuchte Information.

Wie lese ich das am sinnvollsten aus?
Ich nehme an, dass das irgendwie mit regulären Ausdrücken geht, aber wie kann ich denn sagen, dass hinter dem eindeutigen Wort noch diverses anderes Zeug kommt und dann nach ">" die Information beginnt und mit </a> wieder aufhört?

Ich habe mir schon diverse Artikel über die regulären Ausdrücke durchgelesen, aber habe es trotzdem nicht hinbekommen. :(

Danke im Voraus
die semmelkuh
 
also wenn <tag1> nur einmal vorhanden ist müßte es eigentlich funktionieren.
konnte es leider nicht testen.

PHP:
<?php
$fp=@fopen("https://info-adresse.de","r");
if($fp){
   while($line=fgets($fp,1000)){
   $file.=$line;
   }
   fclose($fp);
}
$code = explode("<tag1>eindeutigesWort</tag1>", $file);
$zahl = floor( count($code)/2 );
for ($i=1;$i <= $zahl;$i++) {
    $info[$i]['unwichtig']         = $code[($i-1)*2];
    $info[$i]['wichtig']              = $code[(($i-1)*2)+1];

    $code2 = explode(">", $info[$i]['wichtig']);
    $zahl2 = floor( count($code2)/4 );
    for ($i2=1;$i2 <= $zahl2;$i2++) {
        $info2[$i2]['unwichtig1']         = $code2[($i2-1)*4];
        $info2[$i2]['unwichtig2']        = $code2[(($i2-1)*4)+1];
        $info2[$i2]['wichtig']            = $code2[(($i2-1)*4)+2];
        $info2[$i2]['unwichtig3']        = $code2[(($i2-1)*4)+3];
    
        $file2 = $info2[$i2]['wichtig'];
        $files = array ( "</a");
        $images = array ( "");
        
        $ausgabe_info = str_replace ($files, $images, $file2);
    
        echo "$ausgabe_info";
    }
}
?>
 
Zuletzt bearbeitet:
@King_Markus:
:LOL: :ugly: :LOL: :LOL: :ugly:

@semmelkuh:
Welche Version? 6.0? .NET?
In 6.0 gibts keine RegExp-Unterstützung, da musst du mit InStr() ran und dich von Tag zu Tag "durchsuchen" - einfach immer den vorherigen Rückgabewert als Offset für den nächsten Aufruf benutzen.

.NET müsste RegExp-Unterstützung haben, damit hast du das Ergebnis dann in einer Zeile.
 
@King_Marcus:
Vielen Dank für deine Mühe!
Ich verwende allerdings VB.NET und dein Code ist leider sehr wirr.

@theHacker:
Ich verwende VB.NET (2008). Die RegExp Funktion habe ich mir angesehen, aber ich weiß nicht genau wie ich das machen soll.
Ich möchte ja quasi etwas in dieser Richtung haben: "<tag1>eindeutigesWort</tag1>
<tag2><a href="???">dashierauslesen</a></tag2>"
Aber wie kann ich es denn machen, dass ich dieses "Muster" suchen lasse und er mir dann "dashierauslesen" als Rückgabewert liefert?
Ich habs zwar hingekriegt, dass ich nach einem Muster suchen kann (auch mit belieben Zeichen an bestimmten Stellen, wie hier die URL), aber nicht, dass ich dann einen bestimmten Teil daraus erhalte.

Danke
semmelkuh
 
Ich verwende VB.NET (2008). Die RegExp Funktion habe ich mir angesehen, aber ich weiß nicht genau wie ich das machen soll.
Ok, wie die Funktion genau funktioniert, musst du selber gucken. Ich hab mit .NET noch nie gearbeitet.

In PHP geht das so:
PHP:
preg_match('~<tag1>eindeutigesWort</tag1>\s*
 <tag2><a href="[^"]*">([^>]*)</a></tag2>~', $string, $match);
(Der Code ersetzt die 26 Zeilen von King_Markus komplett :ugly:)

Ich gehe davon aus, dass "dashierauslesen" keine Spitze-Klammer-Zu enthält, also gültiges HTML is. Den regulären Ausdruck (erster Parameter in meinem Code) müsstest du verwenden können.
Ich weiß nur nicht, ob VB.NET auch Delimiter am RegExp braucht oder nicht; da mal im Manual lesen. Falls nicht, entferne die ~ am Anfang und Ende des RegExp.
 
Oh das is mir auch neu, was bedeuten die "~" am Anfang und Ende? Ich dachte immer delimiter bei Perl Regular Expressions seien "/" :?:
 
Hey,
danke für Antworten, besonders theHacker! :)
Hat mir sehr geholfen. Ich habe das jetzt mit regulären Ausdrücken lösen können, in etwa so wie theHacker es geschrieben hat.
Ist zwar zunächst sehr verwirrend, aber nun hat es geklappt ;)

semmelkuh