# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = (r"(?:(?#\n"
r"#json->start)(?:(?#\n"
r" #array->start)\[\s*(?:(?#\n"
r" #element-in-array->start)(?:(?#\n"
r" #object->start){\s*(?:(?:(?#\n"
r" #key:value->start)(?:(?:(?#\n"
r" #key->start)\"[a-zA-Z_]\w*\"(?##key->end))\s*:\s*(?:(?#\n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end)))(?#\n"
r" #key:value->end))(?:\s*,\s*(?:(?#\n"
r" \n"
r" #key:value->start)(?:(?:(?#\n"
r" #key->start)\"[a-zA-Z_]\w*\"(?##key->end))\s*:\s*(?:(?#\n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end)))(?#\n"
r" #key:value->end)))*)?\s*}(?#\n"
r" \n"
r" #object->end))|(?:(?#\n"
r" \n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end))(?#\n"
r" #element-in-array->end))(?:\s*,\s*(?:(?#\n"
r" \n"
r" #element-in-array->start)(?:(?#\n"
r" #object->start){\s*(?:(?#\n"
r" #key:value->start)(?:(?:(?#\n"
r" #key->start)\"[a-zA-Z_]\w*\"(?##key->end))\s*:\s*(?:(?#\n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end)))(?#\n"
r" #key:value->end))(?:\s*,\s*(?:(?#\n"
r" \n"
r" #key:value->start)(?:(?:(?#\n"
r" #key->start)\"[a-zA-Z_]\w*\"(?##key->end))\s*:\s*(?:(?#\n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end)))(?#\n"
r" #key:value->end)))*\s*}(?#\n"
r" \n"
r" #object->end))|(?:(?#\n"
r" \n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end))(?#\n"
r" #element-in-array->end)))*\s*\]|\[\s*\](?#\n"
r" #array->end))|(?:(?#\n"
r" \n"
r" #object->start){\s*(?:(?:(?#\n"
r" #key:value->start)(?:(?:(?#\n"
r" #key->start)\"[a-zA-Z_]\w*\"(?##key->end))\s*:\s*(?:(?#\n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end)))(?#\n"
r" #key:value->end))(?:\s*,\s*(?:(?#\n"
r" \n"
r" #key:value->start)(?:(?:(?#\n"
r" #key->start)\"[a-zA-Z_]\w*\"(?##key->end))\s*:\s*(?:(?#\n"
r" #value->start)(?R)|\"(?:\\.|[^\\\"]*)*\"|[+-]?(?:[1-9]\d*|0)(?:\.\d+)?|true|false|null(?#value->end)))(?##key:value->end)))*)?\s*}(?#\n"
r" #object->end))|(?:(?#\n"
r" #value->start)\"(?:\\.|[^\\\"]*)*\"|(?<=[,:\s\[])[+-]?(?:[1-9]\d*|0)(?:\.\d+)?(?=[\s,\]}])|true|false|null(?#value->end))(?#\n"
r"#json->end))")
test_str = ("{\n"
" \"code\": 1,\n"
" \"re\": [\n"
" \"B121\"\n"
" ],\n"
" \"msg\": null,\n"
" \"e\": null,\n"
" \"detailMsg\": null,\n"
" \"point\": \"com.hshc.hshcwap.modules.secondhand.controller.SecondHandController.queryBrand(SecondHandController.java:270)\",\n"
" \"pointList\": [ ],\n"
" \"error\": false,\n"
" \"success\": true,\n"
" \"successAndReNN\": true\n"
"}\n"
"-------------\n"
"true,false , null, +33.640, 055.23,-22.340, \"12\\\"a\\\\\\\\\"\n"
"-------------\n"
"{}\n\n"
"------------\n\n"
"{\n"
" \"dt\":\"LEADSEC_CS_0700R0600B20171127140643\",\n"
" \"level\":20,\n"
" \"id\":\"152525881\",\n"
" \"type\":\"Alert Log\",\n"
" \"time\":1585291269424,\n"
" \"source\":{\n"
" \"ip\":\"100.100.100.1\",\n"
" \"port\":50223,\n"
" \"mac\":\"ec-41-18-19-3a-54\"\n"
" },\n"
" \"destination\":{\n"
" \"ip\":\"20.20.2.4\",\n"
" \"port\":80,\n"
" \"mac\":\"c8-0c-c8-ef-09-50\"\n"
" },\n"
" \"protocol\":\"HTTP\",\n"
" \"securityid\":\"4\",\n"
" \"attackid\":\"1003\",\n"
" \"subject\":\"HTTP_Acunetix11_AWVS11_Content_Web漏洞扫描2\",\n"
" \"message\":\"nic=5;Method=POST;Host=20.20.2.4;URL长度=215;Http协议头长度=875;URL=/cgi-bin/php.cgi?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions=\\\"\\\" -d open_basedir=none -d auto_prepend_file=php:/input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -n;访问文件=php.cgi;MsgbodyData=3c 3f 70 68 70 20 65 63 68 6f 28 6d 64 35 28 61 63 75 6e 65 74 69 78 2d 70 68 70 2d 63 67 69 2d 72 63 65 29 29 3b 20 3f 3e;\"\n"
"}\n")
matches = re.finditer(regex, test_str, re.MULTILINE)
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