97
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Markdown、Markdown Extra の正規表現一覧

Last updated at Posted at 2014-05-03

意外と、まとまったページがなかったので、メモとして記事にしておきます。

僕はWindowsソフトでMarkdown記法に対応したテキストエディタ、

MarkDown#Editor
http://hibara.org/software/markdownsharpeditor

GitHub_icon.png https://github.com/hibara/MarkDownSharpEditor

を、C#のオープンソースで公開しておりますが、その中で、エディター部分のシンタックスハイライターは、正規表現を使って実装しています。

以下は、その抜粋となります。なにか他のソフトへの組み込みや転用の際に、ご参考にしていただければと思います。また誤りや、「こうした方がすっきりする」などあれば、フィードバックいただけるとうれしいです。

Markdown記法とは?

まずは一応、おさらい。
ご存じない方は、以下のサイトなどが参考になるかと思います。

Markdown - Wikipedia
http://ja.wikipedia.org/wiki/Markdown

本家(考えた人)のサイト
http://daringfireball.net/projects/markdown/

Markdown Extra は、別の人が、Markdownを独自に拡張しPHP用ライブラリにしています。
http://michelf.ca/projects/php-markdown/extra/

ちなみに、拙訳ですが、僕のサイトにその全訳があります。
PHP Markdown Extra 仕様の全訳(意訳)
http://hibara.org/blog/2013/03/11/php-markdown-extra-jp/

Markdown の正規表現

強制ブレーク ( Line break )


\s\s$

見出し1 ( Header 1 )


^#[^#]*?$"

および、


^.*\n=+$

見出し2 ( Header 2 )


^##[^#]*?$"

および、


^.*\n-+$

見出し3 ( Header 3 )


^###[^#]*?$

見出し4 ( Header 4 )


^####[^#]*?$

見出し5 ( Header 5 )


"^#####[^#]*?$

見出し6 ( Header 6 )


^#####[^#]*?$

引用 ( Brockquote )


^>.*$

リスト ( Lists )


^ {0,3}\*[ \t]+.*$|^ {0,3}\+[ \t]+.*$|^ {0,3}-[ \t]+.*$|^ {0,3}[0-9]+\.[ \t]+.*$

コードブロック ( Code blocks )


^ {4,}$|^\t{1,}$

罫線 ( Horizontal )


^(\* ){3,}$|^\*.$|^(- ){3,}|^-{3,}$|^(_ ){3,}$|^_{3,}$

リンク ( Link )

[an example](http://example.com/ "Title")


\[.*\]\((https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)[\t{1,}|\s{1,}]"".*""\)

[This link](http://example.net/)

\[.*\]\((https?|ftp)(:\/\/[-_.!~*\\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)

[an example][id]
[an example] [id]


\[.*\]\((https?|ftp)(:\/\/[-_.!~*\\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\) 

\[.*\]:[\t{1,}| {1,}](https?|ftp)(:\/\/[-_.!~*\\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)[\t{1,}| {1,}]"".*"" 

強調(em, em, strong, strong)


\*.*\*|_.*_|\*\*.*\*\*|__.*__

ソースコード ( Source code )


`.*`

画像 ( Image )


!\[.*\]\(.*\)|!\[.*\]\[.*\]|\[.*\]: .*"".*""

自動リンク(メールアドレスとURL) ( Auto Links )

※以下などを参考にさせていただきました
http://catbot.net/blog/2007/06/re_php.html

<(https?|ftp)(:\/\/[-_.!~*\\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)>

メールアドレスを厳密にフォローするのは難しいようで、以下がベストプラクティス?といった感じです。

<(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:""(?:\\[^\r\n]|[^\\""])*"")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))>

コメントアウト(複数行含めたコメント全部)( Comment out )




Markdown Extra の正規表現

HTMLブロック内のMarkdown記法(Markdown Inside HTML Blocks)


\\s*markdown\\s*=\\s*(?>([\"\'])(.*?)\\1|([^\\s>]*))()(?[\\w:$]+(?:(?=[\\s\"\'/a-zA-Z0-9])(?>\".*?\"|\'.*?\'|.+?)*?)?>||<\\?.*?\\?>|<%.*?%>|)

特殊な属性 ( Special Attributes )


(^.+?)(?:[ ]+.+?)?[ ]*\n(=+|-+)[ ]*\n+

^(\\#{1,6})[ ]*(.+?)[ ]*\\#*(?:[ ]+.+?)?[ ]*\n+

コードブロック区切り(Fenced Code Blocks)


(?:\\n|\\A)(~{3,})[ ]*(?:\\.?([-_:a-zA-Z0-9]+)|\\{.+?\\})?[ ]*\\n((?>(?!\\1[ ]*\\n).*\\n+)+)\\1[ ]*\\n

表組み ( Tables )


^[ ]{0,2}[|](.+)\\n[ ]{0,2}[|]([ ]*[-:]+[-| :]*)\\n((?:[ ]*[|].*\\n)*)(?=\\n|\\Z)

^[ ]{0,2}(\\S.*[|].*)\\n[ ]{0,2}([-:]+[ ]*[|][-| :]*)\\n((?:.*[|].*\\n)*)(?=\\n|\\Z)

定義リスト ( Definition Lists )


(?>\\A\\n?|(?<=\n\n))(?>(([ ]{0,}((?>.*\\S.*\\n)+)\\n?[ ]{0,}:[ ]+)(?s:.+?)(\\z|\\n{2,}(?=\\S)(?![ ]{0,}(?: \\S.*\\n )+?\\n?[ ]{0,}:[ ]+)(?![ ]{0,}:[ ]+))))

脚注 ( Footnotes )


^[ ]{0,}\\[\\^(.+?)\\][ ]?:[ ]*\n?((?:.+|\n(?!\\[\\^.+?\\]:\\s)(?!\\n+[ ]{0,3}\\S))*) 

省略表記 ( Abbreviations )


^[ ]{0,}\\*\\[(.+?)\\][ ]?:(.*)

バックスラッシュエスケープ ( Backslash Escapes )


\\:|\\\|
97
88
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
97
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?