如何在PHP中进行此类字符串操作?

时间:2011-03-08 09:38:01

标签: php regex

我需要转换

 "01,02,03,04,05,07:01"

为:

<b>07</b><b>09</b><b>30</b><b class="color_blue_ball">11</b>

也就是说,在:之前用<b></b>包裹,:之后用<b class="color_blue_ball"></b>包裹。如果没有:,则所有内容都应包含<b></b>

任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:5)

不需要正则表达式:

echo '<b>' . str_replace(array(',', ':'), array('</b><b>', '</b><b class="color_blue_ball">'),  "01,02,03,04,05,07:01") . '</b>';

编辑:如果“01,02,03,04,05,07:01,04,06”有效,那么添加相同的想法explode

$parts = explode(':', "01,02,03,04,05,07,01,04:06");
echo '<b>' . str_replace(',', '</b><b>', $parts[0]) . (isset($parts[1]) ? str_replace(',', '</b><b class="color_blue_ball">',  ',' . $parts[1]) : '') . '</b>';

答案 1 :(得分:2)

我不知道这是否是最好的方法,但我可能会在:,然后在,上拆分字符串,然后分别处理每个部分并加入它们回到一起。

答案 2 :(得分:2)

更冗长:

<?php
function wrapValues($array, $wrapper) {
  $result = array();
  foreach ($array as $elem) {
    $result []= str_replace('?', $elem, $wrapper);
  }   
  return implode('', $result);
}

$values = "01,02,03,04,05,07:01,02";
$firstWrapper = '<b>?</b>';
$secondWrapper = '<b class="color_blue_ball">?</b>';

list($first, $second) = explode(':', $values);

echo wrapValues(explode(',', $first), $firstWrapper) . 
     wrapValues(explode(',', $second), $secondWrapper);