Thanh Nguyen
Thanh Nguyen

Reputation: 5352

Replace string before a string?

Sorry, I'm bad English. I'm going to post my code now:

    $image = 'http://example.com/thisisimage.gif';
    $filename = substr($image, strrpos($image, '/') + 1);
    echo '<br>';
    echo $filename;
    echo '<br>';            
    echo preg_replace('/^[^\/]+/', 'http://mydomain.com', $image);   
    echo '<br>';    

$image is string;

$filename is image name (in example above, it returns 'thisisimage.gif')

Now i want replace all before $filename with 'http://mydomain.com', my code is above but it doesnt work.

Thanks!

Upvotes: 0

Views: 130

Answers (6)

Rolice
Rolice

Reputation: 3103

The other people here have given good answers about how to do it - regex has its advantages but also drawbacks - its slower, respectively requires more resources and for something simple as this, I would advice you to use the explode approach, but while speaking for regex functions you also may try this, instead your preg_replace:

echo preg_replace('#(?:.*?)/([^/]+)$#i', 'http://localhost/$1', $image);

It seems variable length positve lookbehind is not supported in PHP.

Upvotes: 1

aleation
aleation

Reputation: 4844

There's another approach in which you don't need a regular expression:

in Short:

$image = 'http://example.com/thisisimage.gif';
$url = "http://mydomain.com/".basename($image);

Explanation:

If you just want the file name without url's or directory path's, basename() is your friend;

$image = 'http://example.com/thisisimage.gif';
$filename = basename($image);

output: thisisimage.gif

Then you can add whatever domain you want:

$mydomain = "http://mydomain.com/";
$url = $mydomain.$filename;

Upvotes: 2

S.Visser
S.Visser

Reputation: 4725

$foo = explode($filename, $image);
echo $foo[0];

Explode "splits" one the given paramater ( in your case $filename ). It returns an array with where the keys are split on the string you gave.

And if you just want to change the url. you use a str_replace

   $foo = str_replace("http://example.com", "http://localhost", $image);

   //This will change "http://example.com" to "http://localhost", like a text replace in notepad.

In your case:

    $image = 'http://example.com/thisisimage.gif';
    $filename = substr($image, strrpos($image, '/') + 1);
    $foo = explode($filename, $image);
    echo '<br>';
    echo $filename;
    echo '<br>';            
    echo str_replace($foo[0], "http://yourdomain.com/", $url);
    echo '<br>';   

Upvotes: 2

Eric MJ
Eric MJ

Reputation: 738

if you just like to add your own domain before the file name, try this:

$filename = array_pop(explode("/", $image));
echo "http://mydomain.com/" . $filename;

if you wanna only replace thedomain, try this:

echo preg_replace('/.*?[^\/]\/(?!\/)/', 'http://mydomain.com/', $image);

Upvotes: 1

Volkan
Volkan

Reputation: 2210

This should simply work:

$image = 'http://example.com/thisisimage.gif';
$filename = substr($image, strrpos($image, '/') + 1);
echo '<br>';
echo $filename;
echo '<br>';            
echo 'http://mydomain.com/'.$filename;   
echo '<br>';    

Upvotes: 1

Prasanth Bendra
Prasanth Bendra

Reputation: 32740

Try this :

$image = 'http://example.com/thisisimage.gif';  
echo preg_replace('/^http:\/\/.*\.com/', 'http://mydomain.com',$image);

Upvotes: 1

Related Questions