2008-09-21 2 views
6

Как бы вы написали регулярное выражение для преобразования метки в HTML? Например, вы должны ввести в следующем:Регулярное выражение для преобразования метки вниз в 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 символов.

ответ

7

Лучший способ найти версию библиотеки 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

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

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

+0

Я просто наткнулся на следующую статью в http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html. – mattruma 2008-09-21 11:33:13

+0

может быть хорошей идеей добавить эту ссылку в исходное сообщение. – jop 2008-09-21 11:43:45

1

Я не знаю о C# конкретно, но в Perl это будет:
s/
\ * \ * (*.?) \ * \ */
\ < полужирный> $ 1 \ </полужирный>/г
s/
\ * (. *?) \ */
\ < эм> $ 1 \ </EM>/г

0

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

Смежные вопросы