0

我想在我的解析器中添加块引用,比如 Stack Overflow,>用于标记块引用的一部分。

这是我为开始上课所做的事情:

<?php

$string = "This is a paragraph

> This is a blockquote
> This is a blockquote
> This is a blockquote

This is another paragraph
";
$md = new Markdown();
echo $md->parseString($string);

这是我在课堂上为解析块引用所做的工作,问题是,它没有找到我想要引用的部分。

<?php
$this->string = preg_replace("/^>(.+?)/is", "<blockquote>$1</blockquote>", $this->string);

我该怎么做才能找到这些多行引用?

4

2 回答 2

1

您可以使用回调进行替换,/(?:^>.+\n)+/m然后在回调中使用 this /^>/m, "" 返回替换 $match[0] 的结果

 return '<blockquote>' + preg_replace( '/^>/m', "", $match[0] ) + '</blockquote>';

(我是php新手)

于 2013-10-14T23:47:25.443 回答
0

你可以这样做:

$subject = <<<'LOD'
This is a paragraph

> This is a blockquote
> This is a blockquote
> This is a blockquote

This is another paragraph
LOD;

$pattern = '~(?<=(\n)|)\R> (.*)(?=(\R> )?)~';

$result = preg_replace_callback($pattern, function ($match) {
    $before = (empty($match[1])) ? '' : '<blockquote>';
    $after  = (empty($match[3])) ? '</blockquote>' : '';
    return  $before . $match[2] . $after; }, $subject);

print_r($result);
于 2013-10-15T00:02:54.403 回答