Die Mitgliedschaft ist KOSTENLOS und bietet allen registrierten Nutzern unbegrenzten Zugriff auf alle Funktionen, Ressourcen und Tools von ConsultDomain.de! Optionale Mitgliedschaftsupgrades schalten exklusive Vorteile frei, wie Profil-Signaturen mit Links, Bannerplatzierungen, Erwähnungen im wöchentlichen Newsletter und vieles mehr – individuell angepasst an Ihr Mitgliedschaftslevel!

Willkommen!

Durch Ihre Registrierung bei uns können Sie mit anderen Mitgliedern unserer Community diskutieren, teilen und private Nachrichten austauschen.

Jetzt anmelden!

Regexpr für PhP gesucht

Dompteur

New member
Registriert
12. Aug. 2004
Beiträge
216
Wer kann und will mir bitte helfen ?
Ich bastle gerade an einem Skript zur Domainsuche,
die Geheimwaffe der Zukunft sozusagen ;-)
(Keine Angst bei meinen Programmierkentnissen dauert das noch ewig bis sie fertig ist oder überhaupt mal irgendwas nützliches für mich tun kann)
Momentan stecke ich bei der Findung einer geigneten Regexp,
um aus einer Domain den Subdomainteil herauszufiltern.
Also von z.b. sub.domain.de will ich das sub. wegfiltern.
Immer alles bis zum ersten Punkt, egal welche und wieviele Zeichen - ausgenommen natürlich das Muster ".de/"
Die http://www. zu filtern ging ganz einfach, aber die Subdomains sind eine riesen Hürde für mich.
Der PhP "Professor" macht einfach die unmöglichsten Dinge mit meinen Strings,
und ich kann mir nicht erklären warum - trotz PHP Buch und Google.
Wäre nett wenn sich jemand erbarmen würde mir hier mit der nötigen Zauberformel zu helfen.


ThX Dompteur
 
Guten Morgen MadMac !

Tja, PhP.net kenne ich schon,
hat mir aber auch noch nicht soweit geholfen dass ich die richtige Formel gefunden hätte :-(
Aber ich schau nochmal weiter, vielleicht findet ja inzwischen noch jemand
Erbarmen und schüttelt eine fertige Lösung aus dem Ärmel.
 
Ich glaub das hilft mir auch nicht weiter,
eine Sammlung von Regexp's hab ich noch entdeckt falls jemand Bedarf hat:
Hier
Dort hab ich aber auch nicht die Lösung für genau diese Kriterien gefunden,
obwohl einiges dabei wäre was Links,Pfade,Domains betrifft.
Ansonsten noch X Email Validierungen, Postcodes usw.
Ich werde mich eben doch selbst vertieft mit dieser Zeichenmagie auseinandersetzen müssen wenn nicht zufällig ein Profi über meinen Thread stolpert.
Momentan erscheint mir die Materie noch überaus kompliziert :-)
 
in welchem format hast denn die files?

wenn du sie ein array geladen hast dann z.B.:

$c = count($deinarray);
for($i = 1; $i < $c; $i++)
{
$deinarray[$i] = strstr($deinarray[$i], ".");
}

mfg pyro :)
 
Zuletzt bearbeitet:
Du kannst auch mit der PHP-Funktion explode() kannst du eine Zeichenkette nach bestimmten Zeichen trennen, z.B. anhand des Punktes.
Du bekommst dann ein Array zurück, welches die Teile enthält, die von dem Punkt getrennt wurden.

Bei Selfphp:
-------------------------------------
Mit explode() zerlegt man eine Zeichenkette (string) anhand eines vordefinierten
Trennzeichens (separator). Der Parameter limit ist optional und bewirkt, dass nur
maximal limit Elemente im Ergebnis-Array zurückgegeben werden; das letzte
Element des Ergebnis-Arrays enthält dann den Rest des Strings. Alle Elemente
des zuvor zerlegten Strings werden in einem Array zurückgegeben - der
ursprüngliche String bleibt erhalten.
--------------------------------------

Codebeispiel:
--------------------------------------
<?PHP
$string = "PHP ¾ - Die Befehlsreferenz";
echo $string;
echo "<br>";
$array = explode(" ",$string);
for($x=0;$x<count($array);$x++){
echo $array[$x];
}
?>
-------------------------------------

Hoffe es ist das was du suchst.

MfG
 
@all

sorry, konnte noch nicht antworten da ich auch mal schlafen musste :-)

Jetzt werd ich mir eure Tipps mal ansehen, Danke übrigens !

@pyro

Format ist eine Mysql Db, ist aber egal da jederzeit exportiert werden kann in jedes beliebige Format, txt, csv...
Das auslesen mit Php per foreach klaptt ja,
die einzelnen urls möchte ich dann per "ereg_replace(hier die expression)"
behandeln bzw. alles vor dem erstem Punkt inkl. diesem abschneiden.
Und anschliesend bzw. innerhalb derselben Schleife wiederr (um die Subdomains bereinigt) in die DB zurückschreiben.
Das Zurückschreiben per "Update" klappt auch schon.

Nur die Filterung an sich macht Schwierigkeiten,
irgendwie versteh ich die Logik hinter den verschiedenen Ausdrücken und die Syntax nicht richtig, bei einigen meiner Kombinationen bekomme ich Fehlermeldungen wegen falscher Syntax, andere wieder bringen nicht das richtige Ergebnis, d.h. es wird zuviel, zuwenig oder falsch gefiltert.
Ein weiterer Stolperstein ist, dass nicht jede Url eine Subdomain enthält.

Edit:
Hab Dein strstr gerade ausprobiert.
Ergebniss:

.beliebigedomain.de/
.de/
.de/
.de/
.de/
.de/
.de/
.de/
.beliebigedomain.de/
.de/

Hier wird also der Subdomainteil gelöscht, aber falls es keinen solchen gibt wird die Domain selbst gelöscht.
Ist aber schon ein Ansatz, vielleicht klappts mit einer Modifikation.

@Xtreme

Danke für den Tipp mit "explode" ,
ich glaube damit kann ich was anfangen, hab die Möglichkeit schon mal in
Erwägung gezogen, dann aber wieder vergessen durch die Fülle an Informationen die ich beim Googlen gefunden habe.
Aber ich glaube mit einer Vorbehandlung durch Zerstückeln sind wir am richtigen Weg :-)
Ich werd mich jetzt mal damit beschäftigen...

@KuntaKinte

Das www. oder http://www. wegzubringen ist deshalb einfach weil es ein
eindeutiges Muster ist welches nochdazu nur am Anfang des Strings auftritt.
Einfach nach genau dem Muster Suchen und durch "" ersetzen.

ThX schon mal an alle, es wird schon werden :-)
 
Zuletzt bearbeitet:
ich hoffe mal daß ich dich richtig verstanden habe und keine third-levels erwünscht sind, dann ist das ganze relativ einfach:

deine source in ein array einlesen dann:

$c = count($deinarray);
for($i = 1; $i < $c; $i++)
{
$deinarray2[$i] = explode(".", $deinarray[$i]);
$c2 = count($deinarray2); $c3 = $c2 - 1; $tld = deinarray2[$c2]; $sld = deinarray2[$c3];
$string = $sld.".".$tld;
// hier dann dein sql update
}

den string kannst dann updaten... ist nur so auf die schnelle hingetippt... können durchaus ein paar syntax fehler drinnen sein...

ADDON:

Alternativ kannst natürlich auch zuerst alles in ein array auslesen und dann das array auf einmal auf mysql updaten:

$c = count($deinarray);
for($i = 1; $i < $c; $i++)
{
$deinarray2[$i] = explode(".", $deinarray[$i]);
$c2 = count($deinarray2); $c3 = $c2 - 1; $tld = deinarray2[$c2]; $sld = deinarray2[$c3];
$string[$i] = $sld.".".$tld;
}

// hier dann dein mysql update aus dem array heraus...



Viel Glück mit deinem Script :)

mfg pyro :)
 
Zuletzt bearbeitet:
btw wenn du oben angeführtes script verwendest kannst dir natürlich auch das ereg_replace sparen, von dem ich mal annehme, daß du es dafür verwendet hast das http:// etc. zu entfernen, da das obige script die url ja quasi von hinten her aufrollt (nicht von vorn wie du es bis dato vorgehabt hast)....

mfg pyro :)
 
@pyro

Jetzt hab ich zwischenzeitlich noch was anderes gefunden, das ich gerade ausprobiere:
http://de.php.net/manual/de/function.substr.php
Dort fand ich bei den Postings das 3. letzte Posting - function beetween_last usw. interessant.
Also in meinem Fall: zwischen dem letzten vorlommen von "." und ".de/"
was ja gleich dem Domainanteil ist.
Auch hierbei von hinten aufgerollt - wird dieser Teil extrahiert und dann inkl. .tld Endung
in die DB upgedatet.

Wenn das funzt bin ich schon einen guten Schritt weiter.
Deinen Code schau ich mir danach auch noch an - huuch hier ist wieder alles anders, muss das erst mal durchblicken, mein Lerntempo ist sehr gemächlich,
bitte nicht böse sein wenn ich inzwischen abgeschweift bin und Deine Lösung noch nicht nachvollzogen habe.
Die Andere lag irgendwie näher am mir vertrauten Weg :-)

(Wie so oft führen auch hier mehrere Wege zum Ergebnis.)

Eure Vorschläge haben mir bis jetzt schon sehr geholfen,
von den Regexpr in die ich mich vorerst verbohrt hatte bin ich jetzt fast ganz abgekommen, aber Neuland ist für mich so und so das Eine wie das Andere.

EDIT:

Funktioniert nach erstem Testen (Mega-FREUDE :-)) :
PHP:
 function after_last ($this, $inthat)
   {
       if (!is_bool(strrevpos($inthat, $this)))
       return substr($inthat, strrevpos($inthat, $this)+strlen($this));
   };
function between_last ($this, $that, $inthat)
   {
     return after_last($this, before_last($that, $inthat));
   };

$res = between_last ('.', '.de/', $value1);  //extrahiert den gewünschten Teil zwischen dem letztem auftretenden SubdomainPunkt und .tld
$res1 = $res.".de/"; // hier wird die Endung wieder angefügt (kleiner dilledantischer Umweg)
if ($res)  // Nur Urls mit Subdomaininhalt werden upgedatet !
{
echo $res.".de"."<br>"; // Anzeige im Browser zur visuellen Kontrolle
$data = $sql->UPDATE("UPDATE  myDB SET url='$res1' WHERE id = '$value2' ");
}

Nachdem es jetzt funzt, zieh ich mir die Variante von @Pyro auch noch rein,
im Grunde hab ich Dein Skript schon verstanden, jetzt mal testen ob ich
es auch schaffe damit meine Daten abzuarbeiten.
Fleissaufgabe, aber Erfolg treibt einen an :-)


Gruss Dompteur
 
Zuletzt bearbeitet:
mach mal :) sollte funktionieren... :)

script ist wohl ein wenig viel gesagt... wohl eher ne kleine function ;)

mfg, pyro :)
 
zum besseren Verständnis:

$c = count($deinarray); //wieviele domains ingesamt
for($i = 1; $i < $c; $i++) //loop so oft wie domains vorhanden sind
{
$deinarray2[$i] = explode(".", $deinarray[$i]); //domain aufbrechen in die teile z.B. [http://subdomain] , [SLD] und [TLD]
$c2 = count($deinarray2); //Teile des aufgebrochenen domainstrings zählen
$c3 = $c2 - 1; // Arrayeintrag der SLD definieren (1 vor des letzten Arrayeintrags, der der TLD entspricht)
$tld = deinarray2[$c2]; $sld = deinarray2[$c3]; // TLD und SLD aus dem Array den Variablen zuweisen
$string[$i] = $sld.".".$tld; //zusammenfügen der TLD und SLD und in einem Array (string) abspeichern
}

mfg pyro :)
 
@pyro

Danke auch für die Super Erklärung,
Skript ist Skript, egal wie lang, hauptsache es erfüllt den Zweck, ich würde sogar sagen "je kürzer desto besser" ;-)
Muss aber gestehen dass ich noch nicht zum Ausprobieren Deines
Scripts bzw. Function gekommen bin :-( (verstanden habe ich es aber)
Ich hab stattessen die nächste Hürde in Angriff genommen,
das Löschen der Duplikate.
Hab mir dazu auch bei php.net die nötige function "array_unique" gesucht.
Musste aber feststellen dass diese nicht für Multidimensionale Arrays geeignet ist.
Aber unter den angehängten Postings war dann eine Funktion welche das ermöglicht und bei der ich es geschafft habe sie einzubauen.
Tja, ein Programmierer wird wohl nimmer aus mir, aber spannend ist es trotzdem und interessant, wenn da nicht soviele Stolpersteine,Sackgassen und Abzweigungen wären :-)

Gruss Dompteur

Edit:
Habs jetzt mal ausprobiert,
bekomme eine Fehlermeldung:
"Parse error: parse error, unexpected '[' in C:\xampp\htdocs\pyro.php on line 76"
Ich wüsste nicht was an der [$c2] nicht stimmt ?
Soll kein Problem sein, da ich ja schon eine Lösung habe, aber
ich hab versprochen es auszuprobieren und leider wie meisstens funktionierts bei mir wieder mal nicht auf Anhieb.
 
Zuletzt bearbeitet:
nur als hint, ich persönlich hab die erfahrung gemacht, daß du alles was du über mySQL machen kannst, du eher über mySQL machen solltest, da PHP - Berechnungen nicht mit denen von mySQL Schritt halten können...(betreffend dem Löschen von Duplikaten).

Versteh mich nicht falsch, beide und noch eine Menge mehr sind möglich, jedoch der schnellere beim Ablauf des Scripts ist sicher der über mySQL...

mfg pyro
 
pyro schrieb:
nur als hint, ich persönlich hab die erfahrung gemacht, daß du alles was du über mySQL machen kannst, du eher über mySQL machen solltest, da PHP - Berechnungen nicht mit denen von mySQL Schritt halten können...(betreffend dem Löschen von Duplikaten).

Versteh mich nicht falsch, beide und noch eine Menge mehr sind möglich, jedoch der schnellere beim Ablauf des Scripts ist sicher der über mySQL...

mfg pyro

Schon klar, das hab ich eigentlich selbst auch so vermutet -
nur hatte ich beim Erstellen der Abfrage auch wieder Schwierigkeiten,
nämlich dass ein DISTINCT nur auf eine Spalte anwendbar ist.
Wenn ich jetzt aber Url und id dazu habe dann kann ich nur die Url alleine (Distinct) abfragen.
Wenn ich die dann wieder zurückschreibe (Update) dann passen die ID's ja nicht mehr.
Es gibt zwar auch dafür einen Weg, hab dazu im MySql Kochbuch etwas gefunden, aber habe gestern Nacht nicht mehr die energie gehabt das auch noch nachzuvollziehen, zu verstehen und anzuwenden.
Die Geschwindigkeit ist hier auch nicht so wichtig da diese Routine ja (zumindest bei meinem Bedarfsfall ) nur hin und wieder mal ausgeführt werden soll und nicht ein Teil ist der ständig abgearbeitet wird.
Eigentlich nur einmal um die bestehende DB zu "reinigen" danach setzte ich einfach die betreffende Spalte "Unique" damit sind von vornherein Duplikate ausgeschlossen.


Ps: hab mein voriges Posting editiert
und hoffentlich stört niemand unsere ausgiebige Posterei in dem Thread -
Thema Pushen, ich hoffe auch dass dieser kleine Exkurs in die Php-Mysql Welt auch für andere interessant ist...
 
Zuletzt bearbeitet:
hallo sorry, syntax fehler:

$tld = deinarray2[$c2]; $sld = deinarray2[$c3];

hab hier die $ vergessen -> $deinarray2 sollte es heißen (bei beiden)....

mfg pyro :)
 
Ups das fehlende $ hätte mir bei genauerem Hinsehen auch auffallen können.
War aber leider nicht das letzte Problem.
Dein Code passt anscheinend nicht zum Multidimensionalen Array das ich behandeln will:
print_r($string) sagt:
Array ( [1] => .Array [2] => Array.Array [3] => Array.Array [4] => Array.Array ) Array.Array

Das Multidim. Array gehört also vorher aufgesplittet, damit nur mehr eins vorhanden ist mit den urls alleine, aber dann fehlt wieder der Bezug zu den id usw., das ist mir dann doch zu kompliziert.
Ich muss mir das Thema Arrays genauer anschauen, da fehlt mir noch
Grundlegendes.
Fürs erste bin ich zufrieden dass es irgendwie (mit der anderen Variante) funktioniert.
Es würde wohl auch mit Deinem code, aber wenn ich das jetzt auch noch zu Ende bringe dann komm ich mit dem eigentlichen Vorhaben nicht weiter.
Und Deine Zeit möchte ich auch nicht unnötig strapazieren.
 
Zuletzt bearbeitet:
kein prob :)

yep der code ist nicht für ein multidimensionales array gedacht sondern für ein eindimensionales (max. zweidimensionales, da man ja die ID wenn es ne normale Zahlenfolge ist so auslesen kann, daß diese info im array mitübergeben wird obwohl nur eindimensionales array). Hab das mit der ID anscheinend überlesen, sorry....

mfg pyro :)
 

Who has viewed this thread (Total: 1) Details anzeigen

Neueste Themen

Beliebte Inhalte

Besonderer Dank

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
68.348
Beiträge
377.385
Mitglieder
6.777
Neuestes Mitglied
tedcars
Zurück
Oben