use strict;
my $str = '{{ Техническая часть }}
{{ / Техническая часть }}
[m0][c olive][b][com]New Heading, [p]сокр.[/p] NH[/com][/b][/c] {{ Полная и сокращенная форма заголовка }}
[m0][t]\\[əˈθʌˌʤʊ ˈæʧɔːʃɪŋ\\][/t] [s]sound.wav[/s] {{ Транскрипция и аудиоклип произношения }}
[m0][c darkviolet]I[/c] {{ Первая римская цифра }}
[m0][p]комп.[/p] [p]прог.[/p] [p]сущ.[/p] {{ Зона помет }}
[m1][c indigo]перев[\']о[/\']д т[\']е[/\']рмина п[\']е[/\']рвый[/c] {{ Перевод }}
[m0][c darkviolet]II[/c] {{ Вторая римская цифра }}
[m0] [p]техн.[/p] [p]гл.[/p] {{ Зона помет }}
[m1][c maroon][b]1.[/b][/c] [c indigo]п[\']е[/\']рвый перев[\']о[/\']д т[\']е[/\']рмина[/c] {{ Перевод }}
[m1][c maroon][b]2.[/b][/c] [c indigo]втор[\']о[/\']й перев[\']о[/\']д т[\']е[/\']рмина[/c] {{ Перевод }}
[*] • • •[/*] {{ Разгрничитель }}
[m1][*][s]press_brake.gif[/s][/*]
[m1][*][p]Аним.[/p] Схема работы. [i][c silver]Изображение: wiki.[/c][/i][/*]
[*] [/*]
[m1] Продолженние любого действия в проявленнном мире происходит в непроявленном мире. Начало любого материального действия происходит в уме, а ещё ранее — в психической сфере (то есть, в непроявленном мире). Графической схемой растения [ref dict="Mostitsky Universal (Ru-Ru)"]малина[/ref] является дерево корнями вверх, кроной вниз.[/com] {{ Комментарий }}
[m2][*][ex]♦ Пример абстрактного предложения на тему словарной статьи. [c lightblue](Иван Петров)[/c][/ex][/*] {{ Пример }}
{{[!trs]}}[*] • • •[/*]{{[/!trs]}} {{ Разграничитель }}
[m0][*][com][p]син.[/p] <<Карточка с заголовком X>>, empty article, sample (test) card[/com][/*] {{ Зона синонимов и антонимов }}
[m0][*][com][p]букв.[/p] буквальный перевод; [p]этим.[/p] dummy («болванка») + entry («запись»); [p]появл.[/p] 1999[/com][/*] {{ Этимология }}
[m0][*]► [i][com]Wiki (Eng):[/com][/i] [url]http://en.wikipedia.org[/url][/*] {{ Внешние ссылки - на сайты }}
[m0][*]► [i][com]Wiki (Eng):[/com][/i] [url]{{http://}}www.en.wikipedia.org[/url][/*]
[m0][*]► [i][com]Сайт (Rus):[/com][/i] [url]www.goo.gl/XLFQnc[/url][/*]
[m0][*][p]см.[/p] <<О словаре>>[/*] {{ Внутренние ссылки. Вариант 1 }}
[m0][*][p]см. тж[/p] {{ Внутренние ссылки. Вариант 2 }}
- <<команды DSL>>
- [ref]вложенная карточка[/ref]
- <<особые статьи словаря>>
- <<контрольная карточка>>
[/*]
[*] [/*] {{ Картинка или фото. Вариант 1 }}
[m1][*][s]Photo.jpg[/s][/*]
[m1][*][com][p]Рис.[/p] Подпись к рисунку [i]с выделением[/i]. [i][c silver]Изображение: Имя Автора.[/c][/i][/com][/*]
[*] [/*] {{ Картинка или фото. Вариант 1 }}
[m1][*][s]MP4_video.avi[/s][/*]
[m1][*][com][p]Видео:[/p] Подпись к видеоклипу [i]MP4[/i]. [i][c silver]Автор: Имя Фамилия.[/c][/i][/com][/*]
[m1][p]▪[/p] [com][c gainsboro]05.04.2015[/c][/com] {{ Дата обработки карточки }}
{{ ≡05.04.2015 }} {{ Зона служебных комментариев }}
';
my $regex = qr/(?=[<>@[\\^{~])(?<=(?<!\\)|(?<!\\)(?:\\{2}))(?:\[(?:(?:\/?(?:[\*'bcimpstu]|com|ex|lang|ref|trn1?|!trs|su[bp]|url))|(?:m\d|c\x20[a-z]{3,20}|lang\x20(?:id=\d{1,5}|name="[A-Za-z]{5,22}")|ref(?:\x20dict="[^\r\n"]+")|br))\]|[\\@~^]|{{2}[\s\S]*?}{2}|<{2}|>{2})/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html