如何使用正则表达式替换具有相同字符数的多个字符?

时间:2011-05-27 08:15:16

标签: php regex preg-replace

我有以下来源:

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

并希望用空格替换所有 white 10。我可以轻松地与

匹配
/<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>

(请忽略I'm parsing HTML with regexs这里的事实。我对正则表达式问题的解决方案比对HTML更感兴趣。)

3 个答案:

答案 0 :(得分:5)

$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 :(得分:1)

在这里试试

<?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循环,直到模式不再匹配,替换为已经替换空格和新找到的空格。

答案 2 :(得分:0)

此正则表达式仅匹配1 | 0如果前面有"white"> 正则表达式中的(?<=...)语法称为正向后看......

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