Давайте напишем простую функцию синтаксического анализатора уценки, которая будет брать в одной строке уценки и переводить в соответствующую HTML. Для простоты мы будем поддерживать только одну функцию разметки в синтаксисе atx: заголовки.
Заголовки обозначаются (1-6) хэшами, за которыми следует пробел, за которым следует текст. Количество хэшей определяет уровень заголовка вывода HTML.
Примеры
# Header will become <h1>Header</h1>
## Header will become <h2>Header</h2>
###### Header will become <h6>Header</h6>
Мой код:
function markdown_parser ($markdown) {
$regex = '/(?:(#+)(.+?)\n)|(?:(.+?)\n\s*=+\s*\n)/';
$headerText = $markdown."\n";
$headerText = preg_replace_callback(
$regex,
function($matches){
if (!preg_match('/\s/',$matches[2])) {
return "#".$matches[2];
}
if($matches[1] != ""){
$h_num = strlen($matches[1]);
return html_entity_decode("<h$h_num>".trim($matches[2])."</h$h_num>");
}
},
$headerText
);
return $headerText;
}
он не работает как неудачный тестовый пример :
Failed asserting that two strings are identical.
Expected: Behind # The Scenes
Actual : Behind <h1>The Scenes</h1>