У меня есть следующий источник:
<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.)
 $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]+)