简体   繁体   中英

How to replace html tag with other tags using preg-match?

I have a string like the following.

<label>value1<label>:value<br>
<label>value2<label>:value<br>
<label>value3<label>:value<br>

and i need to arrange this as following

 <li><label>value1<label><span>value</span><li>

i have tried for this last 2 days, but no luck.Any help?

This really isn't something you should do with regex. You might be able to fudge together a solution that works provided it makes a lot of assumptions about the content it's parsing, but it will always be fragile and liable to break should that content deviate from the expected by any significant degree.

A better bet is using PHP's DOM family of classes. I'm not really at liberty to write the code for you (and that's not what SO is for anyway), but I can give you a pointer regarding the steps you need to follow.

  1. Locate text nodes that follow a label and precede a BR (XPath may be useful here)
  2. Put the text node into a span.
  3. Insert the span into the DOM after the label
  4. Remove the BR.
  5. wrap label and span in an li

If, for the sake of regex, you should use it then follow as below :

$string = <<<TOK
<label>value1<label>:value<br>
<label>value2<label>:value<br>
<label>value3<label>:value<br>
TOK;
preg_match_all('/<label>(.*?)<label>\:(.*?)<br>/s', $string, $matches);
print_r($matches);
/*
Array
(
    [0] => Array
        (
            [0] => value1:value
            [1] => value2:value
            [2] => value3:value
        )
    [1] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

    [2] => Array
        (
            [0] => value
            [1] => value
            [2] => value
        )
)
*/
$content = "";
foreach($matches as $key => $match)
{
    $content.= "<li><label>{$matches[1][$key]}<label><span>{$matches[2][$key]}</span><li>\n";
}
echo($content);
/*
Output:
    <li><label>value1<label><span>value</span><li>
    <li><label>value2<label><span>value</span><li>
    <li><label>value3<label><span>value</span><li>
*/

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