How do I replace multiple characters with the same number of characters with a regular expression?

后端 未结 3 1805
旧巷少年郎
旧巷少年郎 2021-01-20 23:58

I\'ve got the following source:

011011000010011011&         


        
相关标签:
3条回答
  • 2021-01-21 00:16

    This regex will only match 1 | 0 if it's preceded with "white">.
    the (?<=...) syntax in regex is called positive lookbehind...

    (?<="white">)([10]+)
    
    0 讨论(0)
  • 2021-01-21 00:22

    Try this here

    <?php
    $string = '<font color="black">0</font><font color="white">1101100001001101</font><font color="black">1</font><font color="white">0110</font>';
    $pattern = '/(?<=<font color="white">)( *?)[10](?=.*?<\/font>)/';
    $replacement = '$1 ';
    while (preg_match($pattern, $string)) {
            $string = preg_replace($pattern, $replacement, $string);
    }
    echo $string;
    

    I use a positive look behind (?<=<font color="white">) to search for the color part. And a positive look ahead (?=.*?<\/font>) for the end.

    Then I match the already replaced spaces and put them into group 1 and then the [10].

    Then I do a while loop until the pattern do not match anymore and a replace with the already replaces spaces and the new found space.

    0 讨论(0)
  • 2021-01-21 00:27
    $test = '<font color="black">0</font><font color="white">1101100001001101</font><font color="black">1</font><font color="white">0110</font>';
    
    echo preg_replace ('~(<font color="white">)([10]*)(</font>)~e', '"\\1" . str_repeat(" ", strlen ("\\2")) . "\\3"', $test);
    
    0 讨论(0)
提交回复
热议问题