2016-10-21 11 views
1

私はC#のHTML変換器の基本的なMarkdownを作成しています。正規表現を使用してMarkdownインラインリンクをHTMLリンクに変換します。

太字とイタリックのテキストを変換するための正規表現を書くことができましたが、マークダウンリンクをhtmlのリンクタグに変換できる正規表現を考え出すのは苦労しています。例えば

This is a [link](/url) 

This is a <a href='/url'>link</a> 

なるべきこれは、これまでの私のコードです:

var bold = new Regex(@"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1", // Regex for bold text 
     RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); 
var italic = new Regex(@"(\*|_) (?=\S) (.+?) (?<=\S) \1", // Regex for italic text 
     RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); 
var anchor = new Regex(@"??????????", // Regex for hyperlink text 
     RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); 

content = bold.Replace(content, @"<b>$2</b>"); 
content = italic.Replace(content, @"<i>$2</i>"); 
content = anchor.Replace(content, @"<a href='$3'>$2</a>"); 

これを実現することができ、正規表現のどのような?

答えて

4

これにより、この

\[(.+)\]\((\/.+)\) 

を交換してみてください:

<a href='\2'>\1</a> 

例:

[sample link](http://example.com/) 
[sample link](http://example.com/ "with title") 

正規表現から:マークダウンでhttps://regex101.com/r/ur35s8/2

+1

で正規表現働いています/ question/40177342/regex-convert-a-markdown-in-html-link-with-c-sharp "この質問へのリンク") ' – Misiakw

+0

これは本当ですが、/url'を解析します。彼はおそらく「リンク先が自分のサイトから離れていることを望んでいませんか? – Addison

4

URLの二つの方法があるかもしれませんAddisonが示したソリューションは、最初のタイプでのみ動作し、/で始まるURLでのみ機能します。例えば[link name](http://stackoverflow.com/questions/40177342/regex-convert-a-markdown-inline-link-into-an-html-link-with-c-sharp "link to this question")文句を言わない作業ここ

は、このソリューションは、この `[リンク名](http://stackoverflow.comのようなマークアップでは動作しません両方

\[([^]]*)\]\(([^\s^\)]*)[\s\)] 

https://regex101.com/r/kZbw7g/1

+0

はい、正しく入力してください。私の具体的なケースでは、すべてのバリアントのサポートは気にしませんが、Markdown構文の小さなサブセットのみをサポートします。 – tocqueville

+0

okですが、何年かの経験を経て、私は複雑な解決策に時間を費やすことを好みます。私はむしろ分散しているので、私は物事を理想的にするうえで作りました – Misiakw

関連する問題