Как заменить несколько символов одинаковым количеством символов регулярным выражением? - PullRequest
2 голосов
/ 27 мая 2011

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

<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.)

Ответы [ 3 ]

5 голосов
/ 27 мая 2011
$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);
1 голос
/ 27 мая 2011

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

<?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 до тех пор, пока шаблон больше не будет совпадать, и замена заменяется уже замененными пробелами и новым найденным пробелом.

0 голосов
/ 27 мая 2011

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

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