# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"""
(?(DEFINE)
(?<recurs>
(?! {@|@} ) [^|] [^{@|\\]* ( \\.[^{@|\\]* )* | (?R)
)
)
{@
(?<If>\w+)-
(?<Condition>(%?\w++ (:\w+)*)* )
(?<True> [|] [^{@|]*+ (?&recurs)* )
(?<False> [|] (?&recurs)* )?
\s*@}
"""
test_str = ("{@if-statement:sub%statement2|\n"
"<header id=\"header_home\">\n"
" <div class=\"in\">\n"
" <div class=\"top\">\n"
" <h1 class=\"logo\"><a href=\"/\"><img src=\"/img/logo-home.png\" alt=\"\"></a></h1>\n"
" <div class=\"login_outer_wrapper\">\n"
" <button id=\"login\"><div class=\"a\"><i class=\"stripe\"><i></i></i>Log in</div></button>\n"
" <div id=\"login_wrapper\">\n"
" <form method=\"post\" action=\"{^login^}\" id=\"form_login_global\">\n"
" <div class=\"form_field no_description\">\n"
" <label>{!auth:login_email!}</label>\n"
" <div class=\"input\"><input type=\"text\" name=\"form[login]\"></div>\n"
" </div>\n"
" <div class=\"form_field no_description password\">\n"
" <label>{!auth:password!}</label>\n"
" <div class=\"input\"><input type=\"password\" name=\"form[password]\"></div>\n"
" </div>\n"
" <div class=\"remember\">\n"
" <input type=\"checkbox\" name=\"remember\" id=\"remember_me_check\" checked>\n"
" <label for=\"remember_me_check\"><i class=\"fa fa-check\" aria-hidden=\"true\"></i>Remember</label>\n"
" </div>\n"
" <div class=\"submit_box\">\n"
" <button class=\"btn btn_check\">Log in</button>\n"
" </div>\n"
" </form>\n"
" </div>\n"
" </div>\n"
" </div>\n"
" <div class=\"content clr\">\n"
" <div class=\"main_menu\">\n"
" <a href=\"\">\n"
" <i class=\"ico a\"><i class=\"fa fa-lightbulb-o\" aria-hidden=\"true\"></i></i>\n"
" <span>Idea</span>\n"
" <div> </div>\n"
" </a>\n"
" <a href=\"\">\n"
" <i class=\"ico b\"><i class=\"fa fa-user\" aria-hidden=\"true\"></i></i>\n"
" <span>FFa</span>\n"
" </a>\n"
" <a href=\"\">\n"
" <i class=\"ico c\"><i class=\"fa fa-briefcase\" aria-hidden=\"true\"></i></i>\n"
" <span>Buss</span>\n"
" </a>\n"
" </div>\n"
" <div class=\"text_wrapper\">\n\n"
" <div>\n"
" <div class=\"register_wrapper\">\n"
" <a id=\"main_register\" class=\"btn register\">Załóż konto</a>\n"
" <form method=\"post\" action=\"{^login^}\" id=\"form_register_home\">\n"
" <div class=\"form_field no_description\">\n"
" <label>{!auth:email!}</label>\n"
" <div class=\"input\"><input type=\"text\" name=\"form2[email]\"></div>\n"
" </div>\n"
" <div class=\"form_field no_description password\">\n"
" <label>{!auth:password!}</label>\n"
" <div class=\"input tooltip\"><input type=\"password\" name=\"form2[password]\"><i class=\"fa fa-info-circle tooltip_open\" aria-hidden=\"true\" title=\"{!auth:password_format!}\"></i></div>\n\n"
" </div>\n"
" <div class=\"form_field terms no_description\">\n"
" <div class=\"input\">\n"
" <input type=\"checkbox\" name=\"form2[terms]\" id=\"terms_check\">\n"
" <label for=\"terms_check\"><i class=\"fa fa-check\" aria-hidden=\"true\"></i>Agree</label>\n"
" </div>\n"
" </div>\n"
" <div class=\"form_field no_description\">\n"
" <div cl\\|\\|ass=\"input captcha_wrapper\">\n"
" <div class=\"g-recaptcha\" data-sitekey=\"{%captcha_public_key%}\"></div>\n"
" </div>\n"
" </div>\n"
" <div class=\"submit_box\">\n"
" <button class=\"btn btn_check\">{!auth:register_btn!}</button>\n"
" </div>\n"
" </form>\n"
" </div>\n"
" </div>\n"
" </div>\n"
" </div>\n"
" </div>\n"
"</header>|{@if-statement2|echo this|{@if-statement2|echo this|echo othe\\|\\|rwise@}@}\n"
"@}")
matches = re.finditer(regex, test_str, re.VERBOSE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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 Python, please visit: https://docs.python.org/3/library/re.html