|
发表于 2023-11-10 09:10:29
|
显示全部楼层
浙江省宁波市
#在这里快速回复#.版本 2 .支持库 spec .支持库 commobj .支持库 RegEx .支持库 internet .支持库 DeelxRegEx .程序集 程序集1 .子程序 文本_转义解析, , 公开, 把\\解析出\ \r\n解析出#换行符 \"解析出#引号 ,修复:提升安全性 .参数 已转义的文本, 文本型, , 把\转义成\\,#换行符转义成\r\n,其他暂时直接忽略把制表符写出\t,要注意是8进制d码、16进制u码、x码未解析 .参数 返回文本, 文本型, 参考, 提供一个变量从此处返回,该由此处返回文本,提高效率 .局部变量 字节集, 字节集 .局部变量 解析文本偏移指针, 整数型 .局部变量 解析文本指针, 整数型 .局部变量 i, 整数型 .局部变量 转义状态, 逻辑型 .局部变量 循环次数, 整数型 .局部变量 当前字节, 字节型 .局部变量 转码汉字, 字节集, , , 这两个变量用于\u码转换 .局部变量 asci汉字, 文本型 .局部变量 u转义状态, 字节型 .局部变量 找到位置, 字节型 .局部变量 十进制数, 字节型 .局部变量 完全转换, 逻辑型, , , 判断字符是否完全转换完成 字节集 = 到字节集 (已转义的文本) asci汉字 = 取空白文本 (2) 转码汉字 = 取空白字节集 (4) ' 后面两个零是为了确保安全,unicode终止符 循环次数 = 取字节集长度 (字节集) 解析文本指针 = 申请内存 (循环次数 + 1, 假) 解析文本偏移指针 = 解析文本指针 .判断循环首 (真) ' 这里请允许死循环,去掉勾选:【工具】-【系统配置】-【编译】-【编译时是否检查死循环代码】 i = i + 1 .如果真 (i > 循环次数) 跳出循环 () .如果真结束 当前字节 = 字节集 [i] .判断开始 (转义状态 = 假) .如果 (当前字节 = 92) 转义状态 = 真 .否则 写到内存 (当前字节, 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .如果结束 .默认 .判断开始 (u转义状态 > 0) ' 调试输出 (字符 (当前字节)) 找到位置 = 寻找文本 (“0123456789ABCDEF”, 字符 (当前字节), , 真) - 1 .如果真 (找到位置 = 254) ' 没有在码表中找到 字节型中-1=255 再减去1则等于254 i = i - u转义状态 ' 回到\u后面 u转义状态 = 0 转义状态 = 假 写到内存 (“\u”, 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 2 到循环尾 () .如果真结束 .判断开始 (u转义状态 = 1) 十进制数 = 找到位置 × 16 .判断 (u转义状态 = 2) 十进制数 = 十进制数 + 找到位置 转码汉字 [2] = 十进制数 .判断 (u转义状态 = 3) 十进制数 = 找到位置 × 16 .默认 十进制数 = 十进制数 + 找到位置 ' 第四个字符 转码汉字 [1] = 十进制数 W2A_ (0, 0, 转码汉字, 1, asci汉字, 2, 0, 完全转换) 写到内存 (asci汉字, 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 2 u转义状态 = 0 转义状态 = 假 到循环尾 () ' 阻止下面那句 u转义状态 = u转义状态 + 1 执行 .判断结束 u转义状态 = u转义状态 + 1 到循环尾 () ' 阻止循环后面那句 转义状态 = 假 .判断 (当前字节 = #字符码_小写u) u转义状态 = 1 到循环尾 () ' 阻止循环后面那句 转义状态 = 假 .判断 (当前字节 = 114) ' 114=r 写到内存 (字符 (#字符码_回车), 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .判断 (当前字节 = 110) ' 110=n 写到内存 (字符 (#字符码_换行), 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .判断 (当前字节 = 116) ' \t 写到内存 (#制表符, 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .判断 (当前字节 = 98) ' \b 写到内存 (字符 (8), 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .判断 (当前字节 = 102) ' \f 写到内存 (字符 (#字符码_换页), 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .判断 (当前字节 = #字符码_斜杆 或 当前字节 = #字符码_反斜杆 或 当前字节 = #字符码_引号) 写到内存 (当前字节, 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 1 .默认 写到内存 (“\” + 字符 (当前字节), 解析文本偏移指针, ) ' 写到内存 (当前字节, 解析文本偏移指针, ) 解析文本偏移指针 = 解析文本偏移指针 + 2 .判断结束 转义状态 = 假 .判断结束 .判断循环尾 () 写到内存 ({ 0 }, 解析文本偏移指针, ) 释放内存 (取变量数据地址 (返回文本)) ' 释放原先内存 写到内存 (解析文本指针, 取变量地址 (返回文本), ) .子程序 文本_格式化_快速, 文本型, 公开, 使用了通用对象支持库 的快速文本对象 .参数 未格式化的json文本, 文本型 .局部变量 长度, 整数型 .局部变量 未格式化字节集, 字节集 .局部变量 快速文本, 快速文本对象 .局部变量 记录, 整数型 .局部变量 字符码, 字节型 .局部变量 引号状态, 逻辑型 .局部变量 缩进量, 整数型, , , 根据当前层次决定 .局部变量 上个字符码, 字节型 .局部变量 上上个字符码, 字节型 .局部变量 字符, 文本型 .局部变量 转义状态, 逻辑型 未格式化字节集 = 到字节集 (未格式化的json文本) 长度 = 取字节集长度 (未格式化字节集) 快速文本.置内存增量 (长度 × 2) .判断循环首 (记录 < 长度) 记录 = 记录 + 1 字符码 = 未格式化字节集 [记录] 字符 = 字符 (字符码) .判断开始 (字符码 = #字符码_引号 且 转义状态 = 假) 引号状态 = 取反 (引号状态) .判断 (引号状态) .判断开始 (字符码 = #字符码_反斜杆) 转义状态 = 取反 (转义状态) .判断 (转义状态) 转义状态 = 假 .判断 (字符码 = #字符码_制表符) ' 制表符自动纠正为\t 字符 = “\t” .判断 (字符码 = #字符码_回车 或 字符码 = #字符码_换行) ' 直接忽略 引号状态 = 假 到循环尾 () .默认 .判断结束 ' 引号状态下,下面的符号均当真文本来处理 .判断 (字符码 = #字符码_回车 或 字符码 = #字符码_换行) 到循环尾 () .判断 (字符码 = #字符码_左大括号) 上个字符码 = 取代码 (快速文本.取文本 (快速文本.取长度 (), 1), ) 上上个字符码 = 取代码 (快速文本.取文本 (快速文本.取长度 () - 1, 1), ) .如果 (上个字符码 = 0 或 (上个字符码 = #字符码_制表符 或 上个字符码 = #字符码_回车) 且 上上个字符码 ≠ #字符码_冒号) 缩进量 = 缩进量 + 1 字符 = “{” + 换行及缩进 (缩进量) .否则 字符 = 换行及缩进 (缩进量) + “{” 缩进量 = 缩进量 + 1 字符 = 字符 + 换行及缩进 (缩进量) .如果结束 .判断 (字符码 = #字符码_右大括号) 缩进量 = 缩进量 - 1 字符 = 换行及缩进 (缩进量) + “}” .判断 (字符码 = #字符码_左方括号) 上个字符码 = 取代码 (快速文本.取文本 (快速文本.取长度 (), 1), ) 上上个字符码 = 取代码 (快速文本.取文本 (快速文本.取长度 () - 1, 1), ) .如果 (上个字符码 = 0 或 (上个字符码 = #字符码_制表符 或 上个字符码 = #字符码_换行) 且 上上个字符码 ≠ #字符码_冒号) 缩进量 = 缩进量 + 1 字符 = “[” + 换行及缩进 (缩进量) .否则 字符 = 换行及缩进 (缩进量) + “[” 缩进量 = 缩进量 + 1 字符 = 字符 + 换行及缩进 (缩进量) .如果结束 .判断 (字符码 = #字符码_右方括号) 缩进量 = 缩进量 - 1 字符 = 换行及缩进 (缩进量) + “]” .判断 (字符码 = #字符码_冒号) 字符 = “:” + #制表符 .判断 (字符码 = #字符码_逗号) 字符 = “,” + 换行及缩进 (缩进量) .判断 (字符码 = #字符码_空格 或 字符码 = #字符码_制表符) ' 回车结尾 到循环尾 () .默认 .判断结束 快速文本.添加 (字符) .判断循环尾 () 返回 (快速文本.取文本 (, )) .子程序 换行及缩进, 文本型 .参数 缩进数量, 整数型 .局部变量 返回文本, 文本型 返回文本 = #换行符 .计次循环首 (缩进数量, ) 返回文本 = 返回文本 + #制表符 .计次循环尾 () 返回 (返回文本) .子程序 获取d理ip, 文本型 .参数 url_api, 文本型 .局部变量 proxy, 文本型 .局部变量 str, 文本型 .局部变量 bin, 字节集 .局部变量 i, 整数型 .局部变量 ss, 搜索结果, , "0" .局部变量 temp, 文本型 .局部变量 d理IP, 文本型, , "0" .局部变量 arr, 文本型, , "0" .如果 (取数组成员数 (d理IP) = 0) bin = HTTP读文件 (url_api) str = 到文本 (bin) 文本_取出中间2 (“\d+\.\d+\.\d+\.\d+:\d+”, str, , , ss) .计次循环首 (取数组成员数 (ss), i) temp = ss [i].取匹配文本 (str, ) .如果真 (文本_是否为IP (temp)) 加入成员 (d理IP, temp) .如果真结束 .计次循环尾 () .否则 .如果结束 str = 编码_utf8到gb2312 (str) ' 调试输出 (1, str) ' 状态条1.置文本 (2, “d理数量” + 到文本 (取数组成员数 (d理IP))) .如果 (取数组成员数 (d理IP) > 0) proxy = d理IP [1] 删除成员 (d理IP, 1, 1) .否则 proxy = “” .如果结束 返回 (proxy) .子程序 文本_取出中间2, 文本型, 公开, 正则方式,匹配成功返回第一条结果文本,匹配失败返回失败原因。 .参数 正则表达式文本, 文本型 .参数 欲被搜索的文本, 文本型 .参数 是否区分大小写, 逻辑型, 可空 .参数 子表达式索引, 整数型, 可空, 匹配结果等于1时调用,默认为1。 .参数 全部搜索结果, 搜索结果, 参考 可空 数组, 返回的全部正则匹配结果 备用。 .局部变量 _局部变量1, 正则表达式 _局部变量1.创建 (正则表达式文本, 取反 (是否区分大小写)) 全部搜索结果 = _局部变量1.搜索全部 (欲被搜索的文本) .如果真 (是否为空 (子表达式索引)) 子表达式索引 = 1 .如果真结束 .判断开始 (_局部变量1.取子表达式个数 () > 0) .判断开始 (取数组成员数 (全部搜索结果) > 0) 返回 (全部搜索结果 [1].取子匹配文本 (欲被搜索的文本, 子表达式索引, )) .默认 返回 (“”) .判断结束 .默认 返回 (“”) .判断结束 .子程序 文本_是否为IP, 逻辑型, 公开, 判断一段文本是否为合法IP地址 .参数 ip文本, 文本型 .局部变量 _局部变量1, 正则表达式 .局部变量 _局部变量2, 搜索结果, , "0" ip文本 = 删全部空 (ip文本) _局部变量1.创建 (“(\d+\.\d+\.\d+\.\d+\:\d+)”, ) _局部变量2 = _局部变量1.搜索全部 (ip文本) .如果 (取数组成员数 (_局部变量2) = 1) .如果 (ip文本 = _局部变量2 [1].取子匹配文本 (ip文本, 1, )) 返回 (真) .否则 返回 (假) .如果结束 .否则 返回 (假) .如果结束 .子程序 替换数据, 文本型 .参数 数据, 文本型 返回 (文本_替换 (数据, , , , “{时间戳13}”, 时间_取北京时间戳 (), “{时间戳10}”, 时间_取北京时间戳 (真), “{文本长度}”, 到文本 (全局_文本长度), , , , )) .子程序 下载编码, 文本型, 公开 .参数 下载地址, 文本型 .局部变量 js, 类_脚本组件 .局部变量 内容, 文本型 js.执行 (#常量5) .如果 (匹配中文字符 (下载地址) ≠ “”) 内容 = js.运行 (“encode”, 下载地址) .否则 内容 = 下载地址 .如果结束 返回 (内容) .子程序 匹配中文字符, 文本型 .参数 content, 文本型 .局部变量 正则, 正则表达式DEELX .局部变量 搜索结果, 搜索结果DEELX, , "0" .局部变量 i, 整数型 .局部变量 rettext, 文本型 .如果真 (正则.创建 (“([\u4e00-\u9fa5]+)”, #正则常量.全局模式, )) 搜索结果 = 正则.搜索全部 (content, ) .计次循环首 (取数组成员数 (搜索结果), i) ' 高级表格1.插入行 (搜索结果 [i].取子匹配文本 (1), i - 1) rettext = rettext + 搜索结果 [i].取子匹配文本 (1) + #换行符 .计次循环尾 () ' 输出调试文本 (rettext) .如果真结束 返回 (rettext) |
|