HTML-Datei durchsuchen und Daen nach einem Muster speichern.

nDeedy

Erfahrenes Mitglied
Moin.
Und zwar möchte ich mit PHP eine HTML-Datei (auf einem externem Server) durchsuchen und alle Daten die z.b. mit 'abc' anfangen und 5-6 Zeichen lang sind in meiner DB speichern. Die Frage ist womit man die HTML durchsucht und wie man die Daten rausfischt. Vorallem auch weil es mit bestimmten Zeichen immer anfängt aber mit verschiedenen endet :/
Ich dachte man könne das mit den preg_Funktionen lösen, aber wie komm ich nicht drauf ;)
 
file_get_contents() sollte helfen

Danach schaust du dir die ganzen String Funktion auf selfphp an. Je nach dem was du machen möchtest findest du dort die entsprechenden Funktionen
 
Also "file_get_contents()" hilft mir in dem Sinne nicht weiter, weder auf php.net noch auf selfphp.com konnte ich Infos finden die mir einen Denkstoß geben :/
Angenommen, die Datei ist jetzt in einem String, dank file_get_contents(), gespeichert. Wie such ich sie jetzt durch?
 
Mit regex kannst du sehr einfach so etwas realisieren..

so zB:

PHP:
$x = 'abcds abcj abcjjj ajdjs abc abciiiii asjdasd asjdhasd';
preg_match_all('%abc[a-z0-9]{2,3} %isU', $x, $sub);
print_r($sub[0]);

musst du nur noch die datei mit dem file_get_contents() zB vorher einlesen.
 
@Michael Engel
Danke, an deinem Beispiel funktioniert es schon mal wunderbar, aber da wäre ein Hacken an der Sache. Und zwar, da der Script eine HTML-Datei durchsuchen soll stehen da ja die Informationen zwischen oder in verschiedenen HTML-Tags drin, d.h. praktisch sind sie nicht mit einem Leerzeichen getrennt, also funktioniert der Script auch nicht :(

Und ich hätte auch noch ne Frage, wo kann ich mich über die "Suchparameter" (z.b. '%abc[a-z0-9]{2,3} %isU') schlau machen. Was halt dieses %isU bedeutet usw. ;)
 
Du könntest vorher ein strip_tags() alle Markups entfernen. zB ;) oder das regex dahingehend erweitern, was ich als schwieriger ansehe.

Tutorials gibt es genug Tuts dafür... Suche einfach nach "Regex Tutorial" oder dergleichen.

aber das iUs heißt:

i -> Case insensetiv... also a und A ist das gleiche
s -> er nimmt die komplette datei ohne zeilenumbrüche als einen String
U -> "Ungreedy", damit sagt man regex das er die kleinstmöglichen Patterns finden soll. und nicht die größtmöglichen. Hier nicht weiter von bedeutung. Aber bei sich wiederholenden Inhalten matcht man schnell ohne das die ganze Datei.
 
hmmm
Also die Tags werden "gestrippt" ;), jedoch bringt mich das nicht weiter.

hier ein genau das Beispiel von mir

PHP:
$x = '<FONT FACE="arial, helvetica" SIZE="3" CLASS="arial3"><B>01095</B></FONT><FONT FACE="arial, helvetica" SIZE="3" CLASS="arial3"><B>01042</B></FONT>';
$y = strip_tags($x);
preg_match_all('%010[a-z0-9]{2,3} %isU', $y, $sub);
echo $y.'<br>';
print_r($sub[0]);

gesucht werden "01095" und "01042"...
Das Array bleibt leer :(
 
Wenn alle so ähnlich aufgebaut sind kann man sagen "sie werden immer von leerzeichen oder >< eingeschlossen... dann sähe es so aus:

PHP:
<?
$x = '<FONT FACE="arial, helvetica" SIZE="3" CLASS="arial3"><B>01095</B></FONT><FONT FACE="arial, helvetica" SIZE="3" CLASS="arial3"><B>01042</B></FONT>';
preg_match_all('%[>| ]010[0-9]{2,3}[<| ]%isU', $x, $sub);
print_r($sub[0]);  
?>

PS: Sry das die zahlen zusammenrutschen hatte ich nich so richtig dran gedacht ^^
 
Irgendwie stell ich mich wahrscheinlich dumm an, aber im Moment verstehe ich nicht, ob $sub in dem obengenannten Beispiel ein Array ist oder nicht. Laut print_r() ist es ja einer, aber wenn ich versuche dessen werte anzuzeigen passiert was komisches :/
PHP:
echo '<br>'.$sub[0].'<br>';
schreibt im Browser einfach "Array". andere Werte, z.b. $sub[2] etc. geben einfach nichts mehr wieder :/
 
AAAHHH! Ich habs geschnallt ;)
Es ist ein mehrdimensionals Array, also sind die Werte in $sub[0][0], $sub[0][1], $sub[0][2] usw gespeichert!

Vielen Dank!
 
Zurück