Textstringsuchen aus Quellcode suchen und speichern

julia29

Erfahrenes Mitglied
Hallo,

aus einem Quellcode möchte ich einen Textstring auslesen, diesen filtern und neu abspeichern.
Dazu habe ich mir folgende Abfrage überlegt:

PHP:
$cont_detailseite = $snoopy->results;

Es wird der komplette Inhalt der Quellcode-Seite in die Variable $cont_detailseite eingelesen.

Als nächstes möchte ich den Wert (1:72) von Maßstab auslesen
Maßstab:
PHP:
<td WIDTH="120">Maßstab</td><td>1:72</td>
mit
# Maßstab finden
PHP:
$cont_detailseite = substr($cont_detailseite, strpos($cont_detailseite, 'Maßstab'));
lösche ich den Inhalt bis zum Wort Maßstab. Dann steht der Wert in der nächsten Zelle.

# Maßstab auslesen
PHP:
$cont_detailseite = substr($cont_detailseite, strpos($cont_detailseite, '<td>')+4);
$mass = substr($cont_detailseite, 0, strpos($cont_detailseite, '</td>'));

Die Variable $mass wird dann in die SQL eingetragen.

Mein Problem ist, es steht nicht der erwartete Maßstab sondern ein ganz anderer Wert in der SQL. Kann ich die Abfrage noch anders angeben?

mfg
Julia
 
Moin Julia,

sowas lässt sich unkompliziert mit regulären Ausdrücken erledigen :)
PHP:
<?php
$cont_detailseite = $snoopy->results;  
if(preg_match('@<td WIDTH="120">Maßstab</td><td>(\d+:\d+)</td>@',$cont_detailseite,$matches))
  {
    $mass=$matches[1];
    //....In DB eintragen
  }
?>
 
Hallo Sven,

vielen Dank, es hat geklappt, der Wert für Maßstab wird korrekt gefunden. Ich bin mir jedoch nicht über die Bedeutung von"(\d+:\d+)" sicher, weil mit der Anpassung weiterer Bereiche/Felder dann nichts mehr gefunden wird.
Wie muß ich also das genau bei den drei nachfolgenden Beispielen schreiben?
Mein Suchstring für "Einzelteile" ist genauso wie bei Maßstab 1:72, bleibt aber leer, ebenso bei "Länge".


PHP:
   # Einzelteile
  $cont_detailseite = $snoopy->results;   
  if(preg_match('@valign="top"><td>Einzelteile</td><td>(\d+:\d+)</td>@',$cont_detailseite,$matches)) 
  { 
     $einzel=$matches[1]; 
    } 

   # Länge
  $cont_detailseite = $snoopy->results;   
  if(preg_match('@valign="top"><td>Länge</td><td>(\d+:\d+)</td>@',$cont_detailseite,$matches)) 
  { 
     $laenge=$matches[1]; 
    }

Beim "Beschreibungstext1" wird es noch komplizierter, da ich hier nur ein paar Tag-Fraqmente zum Suchen habe. Die Eindeutigkeit ist hier nicht mehr so groß wie bei den Beispielen vorher. Ich suche hier genau nach "</B><br><P>"Dies ist bereits der Textinhalt der von Position zu Position wechselt"</P></td>
wobei der in rot markierte Bereich bereits der Wert ist den ich eigentlich darstellen möchte, jedoch bei jeder Position einen anderen Inhalt hat.
Nach dem Beispiel "Beschreibungstext1 wird jedoch nichts gefunden.

PHP:
   # Beschreibungstext1
  $cont_detailseite = $snoopy->results;   
  if(preg_match('@</B><br><P>(\d+:\d+)</P></td>@',$cont_detailseite,$matches)) 
  { 
     $text1=$matches[1]; 
    }


Wie muss ich es richtig schreiben?
mfg
Julia

.
 
Dieses:
Code:
(\d:\d)
findet beliebig viele Ziffern, gefolgt von einem Doppelpunkt und wiederum beliebig viele Ziffern.
(\d steht in RegExp für digit->Ziffer)

Wenn du irgendeinen String suchst, könntest du bspw. jenes nehmen
Code:
([^<]+)
Das findet alles bis zur nächsten spitzen Klammer.
 
Mein Quellcode beginnt mit
PHP:
</B><br><P>Dies ist der Text. Dies ist der Text.</P></td>
und wird mit </P></td> erst abgeschlossen.

Zwischendrin stecken jedoch zahlreiche HTML-Tags in spitzen Klammern. Deshalb kann ich folgende Parameter nicht einsetzen
([^<]+)

Gibt es eine andere Möglichkeit?

Gruß
Julia
 
Also wenn nicht noch woanders im Quelltext diese Kombination von Tags vorkommt, reicht es auch so:

Code:
@</B><br><P>(.*)</P></td>@
 
Zurück