I\'ve got the following source:
011011000010011011&
This regex will only match 1
| 0
if it's preceded with "white">
.
the (?<=...)
syntax in regex is called positive lookbehind...
(?<="white">)([10]+)
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.
$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);