SpritsDracula
SpritsDracula

Reputation: 1090

PHP regex find and replace with new string

I have a string which contains:

[quote name="username" url="/t/44223/topics-name#post_734738"]

I want to write a php regex which will find all the occurrence of this string and find the post number (ex. 734738) and later replace the whole thing with:

[quote=username;new post number based on 734738]

Requirements:

  1. Only URL which starts with '/t/' and ends with '#post_{number}'.
  2. By 'new post number based on 734738' means this will be my custom post number which I will generate from database.

Please help me out. Thanks.

Final Answer:

This is the final answer in case anyone needs this :)

$string = '[quote name="user343I_nsdfdame" url="/t/44223/topics-name#post_734738"]What is your name?[/quote][quote name="username" url="/t/45454/topics-name#post_767676"]Test string[/quote]The quick brown fox....';

if(preg_match_all("/\[quote name=\"([^\"]*)\" url=\"\/t\/[^#]*#post_([0-9]*)\"\]/", $string, $matches)) {
    foreach ($matches[0] as $match) {
        if(preg_match("/\[quote name=\"([^\"]*)\" url=\"\/t\/[^#]*#post_([0-9]*)\"\]/",$match, $reg)) {
            $new = "[quote=".$reg[1].";".$reg[2]."]"; // I have changed $reg[2] according to my need.
            $string = str_replace($match, $new, $string);
        }   
    }
}

echo $string;

Output:

[quote=user343I_nsdfdame;734738]What is your name?[/quote][quote=username;767676]Test string[/quote]The quick brown fox....

Upvotes: 1

Views: 68

Answers (1)

hellcode
hellcode

Reputation: 2698

This will do it:

$string = '[quote name="username" url="/t/44223/topics-name#post_734738"]';
$new = "";
if(preg_match("/\[quote name=\"([^\"]*)\" url=\"\/t\/[^#]*#post_([0-9]*)\"\]/",$string,$reg)) {
    $new = "[quote=".$reg[1].";new post number based on ".$reg[2]."]";
}
echo $new;

Output is:

[quote=username;new post number based on 734738]

Upvotes: 2

Related Questions