简体   繁体   中英

Using Regex to find if the string is inside the array and replace it + PHP

$restricted_images = array(
    "http://api.tweetmeme.com/imagebutton.gif",
    "http://stats.wordpress.com",
    "http://entrepreneur.com.feedsportal.com/",
    "http://feedads.g.doubleclick.net"
);

This are the list of images that I want to know if a certain string has that kind of string.

For example:

$string = "http://api.tweetmeme.com/imagebutton.gif/elson/test/1231adfa/".

Since "http://api.tweetmeme.com/imagebutton.gif" is in the $restricted_images array and it is also a string inside the variable $string , it will replace the $string variable into just a word "replace".

Do you have any idea how to do that one? I'm not a master of RegEx, so any help would be greatly appreciated and rewarded!

Thanks!

maybe this can help

foreach ($restricted_images as $key => $value) {
    if (strpos($string, $value) >= 0){
        $string = 'replace';
    }
}

why regex?

$restricted_images = array(
    "http://api.tweetmeme.com/imagebutton.gif",
    "http://stats.wordpress.com",
    "http://entrepreneur.com.feedsportal.com/",
    "http://feedads.g.doubleclick.net"
);

$string = "http://api.tweetmeme.com/imagebutton.gif/elson/test/1231adfa/";
$restrict = false;
foreach($restricted_images as $restricted_image){
    if(strpos($string,$restricted_image)>-1){
        $restrict = true;
        break;
    }
}

if($restrict) $string = "replace";

You don't really need regex because you're looking for direct string matches.

You can try this:

foreach ($restricted_images as $url) // Iterate through each restricted URL.
{
    if (strpos($string, $url) !== false) // See if the restricted URL substring exists in the string you're trying to check.
    {
        $string = 'replace'; // Reset the value of variable $string.
    }
}

You don't have to use regex'es for this.

$test = "http://api.tweetmeme.com/imagebutton.gif/elson/test/1231adfa/";
foreach($restricted_images as $restricted) {
    if (substr_count($test, $restricted)) {
        $test = 'FORBIDDEN';
    }
} 
// Prepare the $restricted_images array for use by preg_replace()
$func = function($value)
{
    return '/'.preg_quote($value).'/';
}
$restricted_images = array_map($func, $restricted_images);

$string = preg_replace($restricted_images, 'replace', $string);

Edit:

If you decide that you don't need to use regular expressions (which is not really needed with your example), here's a better example then all of those foreach() answers:

$string = str_replace($restricted_images, 'replace', $string);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM