Добрый день, уважаемые пользователи Хабра.
В этом посте хотел бы поделиться тем, с чем игрался долго и надеюсь это будет кому-то полезным.
Недавно столкнулся с тем, что в новом проекте надо было сделать подсветку синтаксиса для языка разметки MarkDown. В последнее время он достаточно популярен в разных местах. Долго гуглил, в результате пришлось все писать самому и долго тестировать чтобы все работало правильно.
Под катом набор регулярных выражений, которые ищут основные элементы разметки MarkDown в варианте для Objective-c.
H1
^# (.)+$ // стандартный заголовок
^.+$n^={3,}$ // заголовок с двойным подчеркиванием
H2
^#{2,2} (.)+$ // стандартный заголовок
^.+$n^-{3,}$ // заголовок с одинарным подчеркиванием
H3… H6
^#{3,3} (.)+$ ... ^#{6,6} (.)+$
bold ( **Текст** )
(?<!*|\*)*{2,2}[^*n].+?[^*]*{2,2}(?!*|\)
italic ( *Текст* или _текст_ )
((?<!*|\)*[^*n].+?[^*|\]*(?!*))|(_.+?_)
bold italic ( ***Текст*** )
(?<!*|\)*{3,3}[^*n].+?[^*|\]*{3,3}(?!*)
monospace ( `текст` )
`[^`]*`
Numbered list
(^d{1,3}. .*$)+|(^ {1,10}d{1,3}. .*$)+
Unnumbered list
(^(*|+|-) .*$)+
image ![img alt](http://image.url/img.png)
![[^[]]*?](.*?)
url [ссылка](http://site.com/)
[[^[]]*?](.*?)|^[*?](.*?)
block quotes
^>{1,4} (.)+$
Здесь кусок скриншота из приложения, в котором эти регулярные выражения применялись.
Автор: cohe4ko