Регулярное выражение для преобразования знака в HTML - PullRequest
7 голосов
/ 21 сентября 2008

Как бы вы написали регулярное выражение для преобразования знака вниз в HTML? Например, вы должны ввести следующее:

This would be *italicized* text and this would be **bold** text

Затем его необходимо преобразовать в:

This would be <em>italicized</em> text and this would be <strong>bold</strong> text

Очень похоже на элемент управления редактирования отступов, используемый stackoverflow.

Разъяснение

Для чего это стоит, я использую C #. Кроме того, это только реальные теги / уценки, которые я хочу разрешить. Объем конвертируемого текста будет не более 300 символов или около того.

Ответы [ 4 ]

6 голосов
/ 21 сентября 2008

Лучший способ - найти версию библиотеки Markdown, портированной на тот язык, который вы используете (вы не указали в своем вопросе).


Теперь, когда вы пояснили, что хотите обрабатывать только STRONG и EM, и что вы используете C #, я рекомендую вам взглянуть на Markdown.NET , чтобы увидеть, как эти теги реализованы. Как видите, на самом деле это два выражения. Вот код:

private string DoItalicsAndBold (string text)
{
    // <strong> must go first:
    text = Regex.Replace (text, @"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1", 
                          new MatchEvaluator (BoldEvaluator),
                          RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);

    // Then <em>:
    text = Regex.Replace (text, @"(\*|_) (?=\S) (.+?) (?<=\S) \1",
                          new MatchEvaluator (ItalicsEvaluator),
                          RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
    return text;
}

private string ItalicsEvaluator (Match match)
{
    return string.Format ("<em>{0}</em>", match.Groups[2].Value);
}

private string BoldEvaluator (Match match)
{
    return string.Format ("<strong>{0}</strong>", match.Groups[2].Value);
}
5 голосов
/ 21 сентября 2008

Одно регулярное выражение не подойдет. У каждой текстовой разметки будет свой HTML-переводчик. Лучше посмотрите, как реализованы существующие конвертеры, чтобы понять, как это работает.

http://en.wikipedia.org/wiki/Markdown#See_also

1 голос
/ 21 сентября 2008

Я не знаю конкретно о C #, но в Perl это будет:
s /
\ * \ * (. *?) \ * \ * /
\ $ 1 \ / г
s /
\ * (. *?) \ * /
\ $ 1 \ / г

0 голосов
/ 21 сентября 2008

Я наткнулся на следующий пост , который рекомендует не делать этого. В моем случае, хотя я стараюсь сделать это простым, но подумал, что опубликую это за рекомендацию jop на тот случай, если кто-то другой захочет это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...