Regulärer Ausdruck gesucht
Gerd
- php
Hi,
ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus
http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
http://www.dmain.de/verz/script.php?u=1&d=datei
machen.
Wer weiß Rat?
Grüße, Gerd
Hallo Gerd.
ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus
http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
http://www.dmain.de/verz/script.php?u=1&d=datei
machen.
Wer weiß Rat?
Der PCRE-Evaluator vielleicht? Ich habe die simpelste Variante gewählt, da du nicht nanntest, was alles auftreten kann.
Einen schönen Freitag noch.
Gruß, Ashura
morgens,
ich möchte gerne [...] per regulärem Ausdruck aus
http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
http://www.dmain.de/verz/script.php?u=1&d=datei
machen.
Ja, und warum machst du es nicht einfach? Wenn man einen String (der ja Bestandteil eines anderen strings sein kann) durch irgendwas anderes ersetzen möchte, gilt in PHP zunächst preg_replace als Mittel der Wahl. Du kannst das natürlich noch von einer Bedingung abhängig machen:
if (Vorkommen eines Links der Domain www.domain.de) {
$Suchmuster = http://www.domain.de/verz/unterverz1/unterverz1a/datei.html;
$Ersatzmuster = http://www.dmain.de/verz/script.php?u=1&d=datei;
$string = beliebiger String;
$korrigierter_string = preg_replace($Suchmuster,$Ersatzmuster,$string);
echo $korrigierter_string;
}
Schematisch würde ich vermutlich in dieser Weise vorgehen.
Grüße aus Berlin
Christoph S.
gudn tach Christoph!
ich möchte gerne [...] per regulärem Ausdruck aus
http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
http://www.dmain.de/verz/script.php?u=1&d=datei
machen.Ja, und warum machst du es nicht einfach?
vermutlich weil er nicht weiss, wie's geht. sonst wuerde er ja nicht fragen.
Wenn man einen String (der ja Bestandteil eines anderen strings sein kann) durch irgendwas anderes ersetzen möchte, gilt in PHP zunächst preg_replace als Mittel der Wahl.
jein.
http://de2.php.net/manual/en/function.str-replace.php@str_replace sollte manchmal bevorzugt werden:
"If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace()."
und substr_replace gibt's da auch noch.
$Suchmuster = http://www.domain.de/verz/unterverz1/unterverz1a/datei.html;
$Ersatzmuster = http://www.dmain.de/verz/script.php?u=1&d=datei;
nur eine kleinigkeit: da fehlen die anfuehrungszeichen. vielleicht war es absicht. aber ein anfaenger wuerde daraus wohl ueberhaupt nicht schlau werden.
$korrigierter_string = preg_replace($Suchmuster,$Ersatzmuster,$string);
Schematisch würde ich vermutlich in dieser Weise vorgehen.
auch wenn's nur schematisch ist, fehlt hier die information, dass z.b.
preg_replace("http://www.domain.de/verz/unterverz1/unterverz1a/datei.html",$Ersatzmuster,$string);
nicht das bringt, was der poster moechte. punkte (.) bedeuten beispielsweise "(fast) beliebiges zeichen".
ein verweis auch das php-manual (preg_replace) waere imho sinnvoller gewesen. dort sind auch gleich infos zur regexp-syntax.
prost
seth
hallo seth,
nur eine kleinigkeit: da fehlen die anfuehrungszeichen. vielleicht war es absicht. aber ein anfaenger wuerde daraus wohl ueberhaupt nicht schlau werden.
Nicht unbedingt Absicht - aber ich habe als Beispiel für die Bedingung ja auch einen Klammerausdruck genommen, der in dieser Form nicht praktikabel ist.
ein verweis auch das php-manual (preg_replace) waere imho sinnvoller gewesen. dort sind auch gleich infos zur regexp-syntax.
Den Verweis hatte ich angegeben.
Grüße aus Berlin
Christoph S.
gudn tach Christoph!
ein verweis auch das php-manual (preg_replace) waere imho sinnvoller gewesen. dort sind auch gleich infos zur regexp-syntax.
Den Verweis hatte ich angegeben.
huch, tatsaechlich, und ich hab's sogar zitiert. hmm, uebersehen...
und "title=" habe ich auch noch vergessen, trotz vorschau, tss.
danke fuer den hinweis. waren meine finger wohl schneller als der kopf.
prost
seth
gudn tach!
ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus
http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
http://www.dmain.de/verz/script.php?u=1&d=datei
machen.
was genau moechtest du?
soll die domain ersetzt werden oder war das nur ein tippfehler?
sind die unterverzeichnisse durchnummeriert und soll diese nummerierung in u=1, u=2 usw. bis u=? verpackt werden?
soll der dateiname ohne erweiterung extrahiert und ebenfalls uebergeben (d=dateiname) werden?
sonst noch was? was ist mit dem unterverzeichnis 1a?
praezisiere mal, was du machen moechtest.
wie weit bist du schon denn schon gekommen?
prost
seth
gudn tach!
ich möchte gerne innerhalb eines Strings ausschließlich bei Vorkommen eines Links der Domain www.domain.de per regulärem Ausdruck aus
http://www.domain.de/verz/unterverz1/unterverz1a/datei.html
http://www.dmain.de/verz/script.php?u=1&d=datei
machen.
was genau moechtest du?
soll die domain ersetzt werden oder war das nur ein tippfehler?
Hallo Seth,
oops. Die Domein soll nicht ersetzt werden, das war tatsächlich ein Tippfehler.
sind die unterverzeichnisse durchnummeriert und soll diese nummerierung in u=1, u=2 usw. bis u=? verpackt werden?
Exakt. So ist es. Für mich wichtig ist lediglich, daß in der zu suchenden URL das im Unterverzeichnis "verz" ein Unterverzeichnis "unterverz""n" vorkommt. Die Ziffer "n" brauch ich, denn die wird für meine Variable "u" genommen.
Und der Dateiname wird meine Variable "d" gebraucht.
Das Unterverzeichnis "1a" entfällt hingegen ersatzlos.
wie weit bist du schon denn schon gekommen?
Es ist unproblematisch, alle möglichen Strings zu suchen und zu ersetzen. Probleme macht mir, daß ich Infos brauche, die noch verwendet werden.
Auch dazu hab ich einige Tuts gefunden. Passen aber alle nicht so richtig.
Weiß nicht, vielleicht würde ich über 1000 Ecken auch nach Rom kommen. Den String suchen, finden und mit "explode" in zig Bestandteile zerstückeln und nach meinem Muster wieder zusammensetzen, so würd ich es machen.
Frage mich aber, ob es nicht auch in einem ein- oder zweizeiler geht?
Grüße, Gerd
prost
seth
gudn tach!
wie weit bist du schon denn schon gekommen?
Es ist unproblematisch, alle möglichen Strings zu suchen und zu ersetzen. Probleme macht mir, daß ich Infos brauche, die noch verwendet werden.
stichwort: backreferences.
Weiß nicht, vielleicht würde ich über 1000 Ecken auch nach Rom kommen. Den String suchen, finden und mit "explode" in zig Bestandteile zerstückeln und nach meinem Muster wieder zusammensetzen, so würd ich es machen.
geht auch.
mit regexp geht sowas allerdings oft leichter. ist aber auch geschmacks-/uebungssache
Frage mich aber, ob es nicht auch in einem ein- oder zweizeiler geht?
es geht.
ungefaehr so:
$str_mit_altem_url='foo http://www.domain.de/verz/unterverz1/unterverz1a/datei.html bar';
$str_mit_neuem_url=preg_replace('~/verz/unterverz(\d+)/[^/]+/([^/]+)\.html\b~', '/verz/script.php?u=$1&d=$2', $str_mit_altem_url);
du solltest es allerdings noch genauer an deine url-struktur anpassen.
prost
seth
Hallo,
Den String suchen, finden und mit "explode" in zig Bestandteile zerstückeln und nach meinem Muster wieder zusammensetzen, so würd ich es machen.
nichts spricht dagegen:
$url='http://www.domain.de/verz/script.php?u='.substr(($d=substr($a[$i],$b)),0,strpos($d,'/')).'&d='.substr($d,strrpos($d,'/')+1,strrpos($d,'.')-strlen($d));
Gruß aus Berlin!
eddi
den Rest sollte ich eventuell auch posten, 'tuschlidung:
$a=array(); // Datenfeld aus den URLs
$z=array();
$c=count($a);
$b=strlen('http://www.domain.de/verz/unterverz');
for($i=0;$i<$c;$i++){
$a[$i]='http://www.domain.de/verz/script.php?u='.substr(($d=substr($a[$i],$b)),0,strpos($d,'/')).'&d='.substr($d,strrpos($d,'/')+1,strrpos($d,'.')-strlen($d));
}
Gruß aus Berlin!
eddi
Hi Eddi,
Oops. Da brauch ich aber mal eben ein paar Minütchen Ruhe, um mir das zu vergegenwärtigen.
Wenn ich nicht weiterkomme, erzählst Du mir dann auch, was das übersetzt heißt?
Dank Dir erstmal, find ich klasse, Deine Hilfestellung.
Gruß, Gerd
den Rest sollte ich eventuell auch posten, 'tuschlidung:
$a=array(); // Datenfeld aus den URLs
$z=array();
$c=count($a);
$b=strlen('http://www.domain.de/verz/unterverz');
for($i=0;$i<$c;$i++){
$a[$i]='http://www.domain.de/verz/script.php?u='.substr(($d=substr($a[$i],$b)),0,strpos($d,'/')).'&d='.substr($d,strrpos($d,'/')+1,strrpos($d,'.')-strlen($d));
}
>
>
> Gruß aus Berlin!
> eddi
>