对于以4个空格开头的每一行,添加text-indent标记

时间:2012-01-17 01:31:22

标签: php regex indentation

我有一些文字,其中一些线条用4个空格缩进。我一直在尝试编写一个正则表达式,它会找到以4个空格开头的每一行,并在开头放一个<span class="indented">,在结尾放一个</span>。不过,我对正则表达式并不擅长,所以它什么都没有。有办法吗?

(我正在使用PHP,以防有一个比正则表达式更容易的选项)。

示例:

Text text text
    Indented text text text
More text text text
A bit more text text.

为:

Text text text
<span class="indented">Indented text text text</span>
More text text text
A bit more text text.

3 个答案:

答案 0 :(得分:3)

以下内容将匹配以至少4个空格或制表符开头的行:

$str = preg_replace("/^(?: {4,}|\t *)(.*)$/m", "<span class=\"indented\">$1</span>", $str);

答案 1 :(得分:0)

我必须做类似的事情,我可能建议的一件事就是将目标格式更改为

<span class="tab"></span>Indented text text text

然后你可以设置你的css类似.tab {width:4em;}而不是使用preg_replace和regex,你可以做

str_replace($str, "    ", "<span class='tab'></span>");

这样可以让8个空格容易变成双倍宽度的标签。

答案 2 :(得分:0)

我认为这应该有效:

//get each line as an item in an array
$array_of_lines = explode("\n", $your_string_of_lines);

foreach($array_of_lines as $line) {
    // First four characters
    $first_four = substr($line, 0, 4);
    if($first_four == '    ') {
        $line = trim($line);
        $line = '<span class="indented">'.$line.'</span>'; 
    }

    $output[] = $line;
}

echo implode("\n",$output);