Как заменить несколько символов одинаковым количеством символов регулярным выражением?

У меня есть следующий источник:

<font color="black">0</font><font color="white">1101100001001101</font><font color="black">1</font><font color="white">0110</font> 

И хотел бы заменить все белые 1 и 0 пробелами. Я могу легко их сопоставить с

 /<font color="white">([10]*)</font>/g 

Есть ли шаблон замены (я использую PHP) для создания того же количества пробелов для сопоставимой группы $1 ?

Результат должен выглядеть так:

 <font color="black">0</font><font color="white"> </font><font color="black">1</font><font color="white"> </font> 

(И, пожалуйста, проигнорируйте тот факт, что я разбираю HTML с регулярными выражениями здесь. Меня больше интересует решение проблемы с регулярным выражением, чем в HTML.)

Solutions Collecting From Web of "Как заменить несколько символов одинаковым количеством символов регулярным выражением?"

 $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); 

Попробуйте это здесь

 <?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; 

Я использую положительный внешний вид (?<=<font color="white">) для поиска цветовой части. И положительный взгляд вперед (?=.*?<\/font>) для конца.

Затем я сопоставляю уже замененные пространства и помещаю их в группу 1, а затем в [10] .

Затем я делаю цикл while до тех пор, пока шаблон больше не будет соответствовать, а заменитель с уже заменяет пробелы и новое найденное пространство.

Это регулярное выражение будет соответствовать только 1 | 0 если ему предшествует "white"> .
синтаксис (?<=...) в regex называется положительным lookbehind …

 (?<="white">)([10]+)