preg_replace Problem

luxlunatic

Grünschnabel
Hallo

kleines Problem - wer hat ne antwort?

Ich möchte alles vor dem Dateiname heraus filtern:

$html = preg_replace('/href="http://(.+?)/(.+?).css"/', 'href="$2.css"', $html);


zB: href="http://www.meineurl.de/style/blabla/style.css"
soll
href="style.css"
werden.

Was ist falsch in meinem preg_replace?
 
Also bei mir geht es mit anderen begrenzern innerhalb des patterns:

PHP:
<?
$html = 'href="http://www.meineurl.de/style/blabla/style.css"';
$html = preg_replace('%href="http://(.+)/(.+).css"%is', 'href="$2.css"', $html );

echo $html;

// href="style.css"
?>
 
Da kann man auch [phpf]explode[/phpf] oder [phpf]parse_url[/phpf] benutzen, was hier glaub ich mehr Sinn macht bzw. einfacher anzuwenden ist:
PHP:
$url = "http://www.meineurl.de/style/blabla/style.css";
$parts = explode('/', $url);
echo $parts[count($parts) - 1];

// Oder:
$url = "http://www.meineurl.de/style/blabla/style.css";
$url = parse_url($url);
echo basename($url['path']);

// splaschs Version ist wohl die beste...
$url = "http://www.meineurl.de/style/blabla/style.css";
echo basename($url);
 
Zuletzt bearbeitet:
versuchs mal damit:

$html = preg_replace('#href="http://(.+)/([^/]+).css"$#', 'href="$2.css"', $string);

Hab die zweite Anweisung dahingehend geändert, dass er jetzt alle Zeichen vor .css ausser / nimmt. Sollte klappen.
 
Warum willst du das so kompliziert mit Regulären ausdrücken machen wenn es doch einen einfachen Php Befehl dafür gibt?

PHP:
//string basename ( string $path [, string $suffix] )

$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file enthält den Wert "index.php"
$file = basename ($path,".php"); // $file enthält den Wert "index"

$pfad=$_SERVER['PHP_SELF'];
$pfad=dirname ($pfad);

$_SERVER['PHP_SELF']; (Gibt die die Aktuelle Url aus)
$pfad=dirname ($pfad); (Gibt dir den Aktuellen Pfad zurück als ohne Domain und ohne http bwz www)

Mfg Splasch
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mAu
jo ich nochmal... :(

die formel : $html = preg_replace('%href="http://(.+)/(.+).css"%is', 'href="$2.css"', $html );

ist ganz gut,. geht auch aber ich hatte was vergessen zu sagen un zwar:

in $html siehts in etwa so aus

$html='
<head>
<link href="http://www.meineurl.de/bla/bla/first.css" media="screen" rel="stylesheet" title="default" />
<link href="http://www.meineurl.de/bla/bla/secnd.css" media="screen" rel="stylesheet" title="default" />
<link href="http://www.meineurl.de/test/default.css" media="screen" rel="stylesheet" title="default" />
meta..
script..
<body>
...
</body>
</head>
';
...die angegebene preg_replace-function ersetzt jedoch nur 1 link und löscht die beiden anderen...

weiss jemand hilfe wie ich das trotzdem hinkriege

danke
 
Siehe meinen Post oben dort steht breits die Lösung.Warum versteift du dich nur auf den einen Befehl?

array explode ( string $delimiter, string $string [, int $limit] )


PHP:
$link=explode('"', $html); // extrahiert den Link aus dem String in ein array
$file = basename($link[0]); // liefert vom ersten link den Dateinamen

Mit einer if klauses kanste dann noch voher den Wert prüfen ob es sich auch um einen Link handelt oder um eine anderen wert.Einfach prüfen ob Http drin enthalten ist.

Erläuterung die erste Zeile des string würde dann im Array so auschauen
link[0]= http://www.meineurl.de/bla/bla/first.css
link[1]= screen
link[2]= stylesheet
link[3]= default
link[4]= http://www.meineurl.de/bla/bla/secnd.css

Unsw,

Mfg Splasch
 
Zuletzt bearbeitet:
das kann ich dir sagen , ich lese eine html datei ein und es sollen NUR die css-Endungen geändert werden.

Danke trotzdem habedie lösung gefunden :

$html = preg_replace('%href="http://(.+)/(.+).css"%i', 'href="$2.css"', $html );



Ich danke allen für die mühe, ihr seid supper! :)
 
Zurück