CN110210212A - 一种数据处理方法、装置以及相关设备 - Google Patents
一种数据处理方法、装置以及相关设备 Download PDFInfo
- Publication number
- CN110210212A CN110210212A CN201910194598.5A CN201910194598A CN110210212A CN 110210212 A CN110210212 A CN 110210212A CN 201910194598 A CN201910194598 A CN 201910194598A CN 110210212 A CN110210212 A CN 110210212A
- Authority
- CN
- China
- Prior art keywords
- character string
- character
- target
- string
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
Abstract
本发明实施例公开了一种数据处理方法、装置以及相关设备,该数据处理方法包括:获取前端设备发送的目标模板文件,将目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;从第一字符序列中提取逻辑字符串,根据逻辑字符串和第二字符序列生成用于执行命令的目标命令字符串;在目标安全沙箱中根据目标命令字符串生成可执行函数代码,并基于可执行函数代码获取与目标模板文件相匹配的代码输出结果,将代码输出结果发送至前端设备,以使前端设备显示代码输出结果。采用本发明,可以提高解析模板文件的效率及保证安全性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据处理方法、装置以及相关设备。
背景技术
模板引擎是为了使用户界面与业务数据(内容)分离而产生的。例如,将网站程序的模板文件与业务数据通过模板引擎解析后,可以生成标准的HTML(HyperText MarkupLanguage,超级文本标记语言)程序代码。因此,通过模板引擎可以降低界面代码和数据生成代码之间的耦合性,模板引擎不仅可以提升程序开发的效率,同时良好的设计也可以提高程序的复用性。
现有的模板引擎主要处理HTML数据类型的模板文件,解析后生成HTML程序代码,解析前首先需要检测模板文件的文件类型和模板语言是否和模板引擎相匹配,只有匹配时,模板引擎才能解析模板文件,进而生成HTML程序代码。
上述可知,现有的模板引擎解析技术只能解析匹配的模板文件,不同文件类型、不同模板语言的模板文件需要由不同的模板引擎进行解析。当存在多个不同类型的模板文件需要解析时,就需要调用对应的模板引擎,进而降低模板文件的解析效率。
发明内容
本发明实施例提供一种数据处理方法、装置以及相关设备,可以解析不同文件类型的模板文件,提高解析模板文件的效率。
本发明实施例一方面提供了一种数据处理方法,包括:
获取前端设备发送的目标模板文件,将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;
从所述第一字符序列中提取逻辑字符串,根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串;
在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
其中,所述逻辑字符串包括表达式字符串和变量字符串;
所述根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串,包括:
生成用于执行第一命令的第一命令字符串,所述第一命令是创建目标数组的命令;
根据所述变量字符串,生成用于执行第二命令的第二命令字符串,所述第二命令是向所述目标数组添加变量的命令;
根据所述第二字符序列,生成用于执行第三命令的第三命令字符串,所述第三命令是向所述目标数组添加所述第二字符序列的命令;
根据所述变量字符串、所述第二字符序列和所述表达式字符串在所述目标内容字符串中的位置信息,将所述第一命令字符串、所述第二命令字符串、所述第三命令字符串和所述表达式字符串组合为所述目标命令字符串。
其中,所述在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果,包括:
基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱;
生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码;
在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果;
当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
其中,还包括:
当获取到所述目标安全沙箱所反馈的异常结果消息时,停止运行所述可执行函数代码,并关闭所述目标安全沙箱对应的进程,生成异常提示消息,并将所述异常提示消息转发至所述前端设备。
其中,所述在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果,包括:
在所述目标安全沙箱中运行所述第一命令,以创建所述目标数组;
获取与所述变量字符串中的目标变量对应的输入参数,并根据所述内部发送请求将所述输入参数发送至所述目标安全沙箱;
在所述目标安全沙箱中运行所述第二命令,以生成与所述输入参数和所述目标变量对应的结果变量值,并将所述结果变量值作为数组元素添加至所述目标数组;
在所述目标安全沙箱中运行所述第三命令,以将所述第二字符序列作为数组元素添加至所述目标数组;
将所述目标数组中的所有数组元素组合为所述代码输出结果。
其中,所述获取与所述变量字符串中的目标变量对应的输入参数,包括:
接收与所述变量字符串中的目标变量对应的输入变量值,将所述输入变量值确定为所述输入参数;或,
根据目标用户界面生成界面变量值,将所述界面变量值确定为所述输入参数;所述界面变量值是根据用户在所述目标用户界面的操作行为生成的。
其中,所述将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列,包括:
读取所述目标模板文件所包含的多个内容字符,作为所述目标内容字符串;
获取逻辑匹配模式;所述逻辑匹配模式包括逻辑字符对;
在所述目标内容字符串中确定与所述逻辑字符对满足正则匹配规则的匹配字符对;所述匹配字符对包括第一匹配字符和第二匹配字符;
以所述第一匹配字符为字符序列起点、以所述第二匹配字符为字符序列终点,从所述目标内容字符串中提取字符序列,作为所述第一字符序列;
将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列。
其中,所述将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列,包括:
获取所述第一匹配字符在所述目标内容字符串中的首位位置下标,作为起始下标,获取所述第二匹配字符在所述目标内容字符串中的首位位置下标,作为终止下标;
获取所述目标内容字符串中首位字符的位置下标,作为游标;
将处于所述游标和所述起始下标区间内的字符序列,作为第一目标子序列;
将所述终止下标相邻的位置下标确定为所述游标,根据所述第一匹配字符确定下一个起始下标,根据所述第二匹配字符确定下一个终止下标,直至确定出所述目标内容字符串中的所有第一目标子序列;
将处于所述游标和所述目标内容字符串中末位字符的位置下标区间内的字符序列,作为第二目标子序列;
将所有第一目标子序列和所述第二目标子序列确定为所述第二字符序列。
其中,所述逻辑字符串包括表达式字符串和变量字符串;
所述从所述第一字符序列中提取逻辑字符串,包括:
将所述第一字符序列中位于所述匹配字符对之间的字符串,作为待确定字符串;
若所述待确定字符串包含逻辑关键字,则将所述待确定字符串确定为所述表达式字符串;
若所述待确定字符串包含目标变量标识符,则将所述待确定字符串中除所述目标变量标识符之外的字符串,确定为所述变量字符串。
其中,所述获取前端设备发送的目标模板文件,包括:
获取所述前端设备发送的原始模板文件;
提取所述原始模板文件中变量对应的模板变量标识符,并提取所述原始模板文件中表达式对应的模板表达式标识符;
若所述模板变量标识符与所述模板表达式标识符均与所述逻辑字符对相同,则将所述原始模板文件确定为所述目标模板文件。
本发明实施例另一方面提供了一种数据处理装置,包括:
获取模块,用于获取前端设备发送的目标模板文件;
划分模块,用于将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;
提取模块,用于从所述第一字符序列中提取逻辑字符串;
生成模块,用于根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串;
运行模块,用于在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
其中,所述逻辑字符串包括表达式字符串和变量字符串;
所述生成模块,包括:
生成单元,用于生成用于执行第一命令的第一命令字符串,所述第一命令是创建目标数组的命令;
所述生成单元,还用于根据所述变量字符串,生成用于执行第二命令的第二命令字符串,所述第二命令是向所述目标数组添加变量的命令;
所述生成单元,还用于根据所述第二字符序列,生成用于执行第三命令的第三命令字符串,所述第三命令是向所述目标数组添加所述第二字符序列的命令;
组合单元,用于根据所述变量字符串、所述第二字符序列和所述表达式字符串在所述目标内容字符串中的位置信息,将所述第一命令字符串、所述第二命令字符串、所述第三命令字符串和所述表达式字符串组合为所述目标命令字符串。
其中,所述运行模块,包括:
选择单元,用于基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱;
转换单元,用于生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码;
运行单元,用于在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果;
接收单元,用于当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
其中,还包括:
停止单元,用于当获取到所述目标安全沙箱所反馈的异常结果消息时,停止运行所述可执行函数代码,并关闭所述目标安全沙箱对应的进程,生成异常提示消息,并将所述异常提示消息转发至所述前端设备。
其中,所述运行单元,包括:
运行子单元,用于在所述目标安全沙箱中运行所述第一命令,以创建所述目标数组;
获取子单元,用于获取与所述变量字符串中的目标变量对应的输入参数;
所述运行子单元,还用于并根据所述内部发送请求将所述输入参数发送至所述目标安全沙箱;
所述运行子单元,还用于在所述目标安全沙箱中运行所述第二命令,以生成与所述输入参数和所述目标变量对应的结果变量值,并将所述结果变量值作为数组元素添加至所述目标数组;
所述运行子单元,还用于在所述目标安全沙箱中运行所述第三命令,以将所述第二字符序列作为数组元素添加至所述目标数组;
所述运行子单元,还用于将所述目标数组中的所有数组元素组合为所述代码输出结果。
其中,所述获取子单元,包括:
接收子单元,用于接收与所述变量字符串中的目标变量对应的输入变量值,将所述输入变量值确定为所述输入参数;或,
生成子单元,用于根据目标用户界面生成界面变量值,将所述界面变量值确定为所述输入参数;所述界面变量值是根据用户在所述目标用户界面的操作行为生成的。
其中,所述划分模块,包括:
读取单元,用于读取所述目标模板文件所包含的多个内容字符,作为所述目标内容字符串;
所述读取单元,还用于获取逻辑匹配模式;所述逻辑匹配模式包括逻辑字符对;
匹配单元,用于在所述目标内容字符串中确定与所述逻辑字符对满足正则匹配规则的匹配字符对;所述匹配字符对包括第一匹配字符和第二匹配字符;
所述匹配单元,还用于以所述第一匹配字符为字符序列起点、以所述第二匹配字符为字符序列终点,从所述目标内容字符串中提取字符序列,作为所述第一字符序列;
第一确定单元,用于将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列。
其中,所述第一确定单元,包括:
第一确定子单元,用于获取所述第一匹配字符在所述目标内容字符串中的首位位置下标,作为起始下标,获取所述第二匹配字符在所述目标内容字符串中的首位位置下标,作为终止下标;
所述第一确定子单元,还用于获取所述目标内容字符串中首位字符的位置下标,作为游标;
所述第一确定子单元,还用于将处于所述游标和所述起始下标区间内的字符序列,作为第一目标子序列;
所述第一确定子单元,还用于将所述终止下标相邻的位置下标确定为所述游标,根据所述第一匹配字符确定下一个起始下标,根据所述第二匹配字符确定下一个终止下标,直至确定出所述目标内容字符串中的所有第一目标子序列;
所述第一确定子单元,还用于将处于所述游标和所述目标内容字符串中末位字符的位置下标区间内的字符序列,作为第二目标子序列;
第二确定子单元,用于将所有第一目标子序列和所述第二目标子序列确定为所述第二字符序列。
其中,所述逻辑字符串包括表达式字符串和变量字符串;
所述提取模块,包括:
第二确定单元,用于将所述第一字符序列中位于所述匹配字符对之间的字符串,作为待确定字符串;
所述第二确定单元,还用于若所述待确定字符串包含逻辑关键字,则将所述待确定字符串确定为所述表达式字符串;
第三确定单元,用于若所述待确定字符串包含目标变量标识符,则将所述待确定字符串中除所述目标变量标识符之外的字符串,确定为所述变量字符串。
其中,所述获取模块,包括:
获取单元,用于获取所述前端设备发送的原始模板文件;
所述获取单元,还用于提取所述原始模板文件中变量对应的模板变量标识符,并提取所述原始模板文件中表达式对应的模板表达式标识符;
第四确定单元,用于若所述模板变量标识符与所述模板表达式标识符均与所述逻辑字符对相同,则将所述原始模板文件确定为所述目标模板文件。
本发明实施例另一方面提供了一种电子设备,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如本发明实施例中一方面中的方法。
本发明实施例另一方面提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如本发明实施例中一方面中的方法。
本发明实施例通过将模板文件所包含的内容字符串划分为第一字符序列和第二字符序列,进而从第一字符序列中提取出逻辑字符串,并根据逻辑字符串和第二字符序列生成目标命令字符串;在安全沙箱中将目标命令字符串转换为可执行函数代码,并运行该函数代码获取代码输出结果。上述可知,通过识别出模板文件中的逻辑部分(即第一字符序列)和非逻辑部分(即第二字符序列),分别生成对应的函数代码语句(即目标命令字符串),以解析模板文件,而不关注模板文件的文件类型以及模板语言,高通用性的模板文件解析方法可以解析多种不同类型的模板文件,尤其是当存在多个不同类型的模板文件需要解析时,通用性的模板解析方法可以提高模板文件的解析效率;进一步地,在独立的沙箱环境中运行函数代码,可以隔离宿主系统,提高系统安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据处理的系统架构图;
图2a-图2b是本发明实施例提供的一种数据处理的场景示意图;
图3a是本发明实施例提供的一种数据处理方法的流程示意图;
图3b是本发明实施例提供的一种确定第一字符序列以及第二字符序列的示意图;
图4是本发送实施例提供的一种确定目标命令字符串的流程示意图;
图5是本发明实施例提供的一种确定代码输出结果的示意图;
图6是本发明实施例提供的一种数据处理的交互示意图;
图7是本发明实施例提供的一种数据处理装置的结构示意图;
图8是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,是本发明实施例提供的一种数据处理的系统架构图。服务器10f通过交换机10e和通信总线10d与用户终端集群建立连接,用户终端集群可以包括:用户终端10a、用户终端10b、...、用户终端10c。
以用户终端10a为例,当用户终端10a接收到待解析模板文件时,用户终端10a将待解析模板文件发送至服务器10f。服务器10f根据待解析模板文件中所包含的内容字符串生成命令字符串,并在沙箱中将命令字符串转换为函数代码,运行该函数代码以得到代码输出结果。服务器10f将解析得到的代码输出结果下发至用户终端10a,后续用户终端10a可以在屏幕上显示该代码输出结果。
当然,若用户终端10a具有解析模板文件的功能,也可以直接由用户终端10a解析模板文件得到代码输出结果,同样将解析出来的代码输出结果显示在屏幕上。下述以用户终端10a、服务器10f如何根据模板文件所包含的内容字符串解析模板文件为例进行具体的说明。
其中,图1所示的用户终端10a、用户终端10b、用户终端10c等可以包括手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(MID,mobile internet device)、可穿戴设备(例如智能手表、智能手环等)等。
请参见图2a-图2b,是本发明实施例提供的一种数据处理的场景示意图。如图2a所示,用户向用户终端10a输入待解析的模板文件20a,用户终端10a将该模板文件20a发送至服务器10f。服务器10f获取用于标识逻辑部分的逻辑字符对<%%>,根据上述逻辑字符对可以将模板文件20a中所包含的字符串划分为属于逻辑运算类型的字符序列20c和通用字符类型的字符序列20b。其中,在模板文件20a中分别以逻辑字符对为字符序列起点和字符序列终点的字符序列就属于逻辑运算类型的字符序列;对应地,模板文件20a中除了属于逻辑运运算类型的字符序列以外的字符序列均属于通用字符序列。换句话说,模板文件20a中的逻辑部分是通过逻辑字符对“<%%>”来进行标识的。
对字符序列20c来说,服务器10f将位于逻辑字符对“<%%>”之间的字符串作为待确定字符串,因此可以确定2个待确定字符串,分别为“var c=”;c=a+b”以及“=c”。对待确定字符串“var c=”;c=a+b;”来说,存在逻辑关键字“var”,因此字符串“var c=”;c=a+b;”是表达式字符串;对待确定字符串“=c”来说,存在变量标识符“=”,因此将字符串“=c”中除变量标识符“=”以外的字符作为变量字符串,即“c”是变量字符串。
接下来,服务器10f根据字符序列20b、表达式字符串“var c=”;c=a+b;”、变量字符串“c”在模板文件20a中的前后顺序,生成命令字符串。
首先服务器10f生成创建数组r的命令字符串:var r=[];
由于字符串“请计算a+b的和?”属于通用字符类型,因此服务器10f生成向数组r添加字符串“请计算a+b的和?”的命令字符串:r.push(`请计算a+b的和?`);
由于字符串“var c=”;c=a+b;”属于表达式字符串,因此,服务器10f直接将上述表达式字符串作为命令字符串:var c=”;c=a+b;
由于字符串“答案:”属于通用字符序列,因此服务器10f生成向数组r添加字符串“答案:”的命令字符串:r.push(`答案:`);
由于字符串“c”属于变量字符串,因此,服务器10f生成向数组r添加变量c的命令字符串:r.push(c);
服务器10f将上述多个命令字符串组合为命令字符串集合20d:
var r=[];
r.push(`请计算a+b的和?`);
var c=”;
c=a+b;
r.push(`答案:`);
r.push(c);
服务器10f创建多个沙箱,在上述多个沙箱中选择满足负载均衡条件的沙箱作为目标沙箱,并将上述命令字符串集合20d发送至目标沙箱。在目标沙箱中将命令字符串集合20d转换为可执行函数代码,即调用function对象,以将字符串集合20d中的字符串作为函数体,生成满足编程语言语法规则的可执行函数。
服务器10f获取输入参数20e:a=1,b=2,在目标沙箱中运行可执行函数,即是依次执行上述多个命令字符串对应的命令:首先创建数组r,向数组r添加字符串“请计算a+b的和?”;然后根据输出参数a和b计算变量c的取值为3;向数组r添加字符串“答案:”;最后向数组r添加变量c的取值,即是向数组r中添加数值3。最后服务器10f将数组r中的所有元素组合为代码输出结果20f:请计算a+b的和?答案:3。
如图2b所示,服务器10f将代码输出结果20f发送至用户终端10a,如界面20k所示,可以用户终端10a可以将代码输出结果20f显示在的屏幕中。
其中,将模板文件中所包含的字符串划分第一字符序列(如图2a对应实施例中的字符序列20c)和第二字符序列(如图2a对应实施例中的字符序列20b)、生成命令字符串、创建沙箱、确定代码输出结果的具体过程可以参见以下图3a至图6所对应的实施例。
本发明涉及通用性的模板解析引擎,可以解析各种类型的模板文件,该模板解析引擎可以集成在任何需要模版解析引擎的系统中,也可以作为独立软件或者app(Application,应用程序),本发明的模板解析引擎的工作原理可以参见图3a,是本发明实施例提供的一种数据处理方法的流程示意图。如图3a所示,数据处理方法可以包括:
步骤S101,获取前端设备发送的目标模板文件,将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列。
具体的,后端设备(如上述图2a-图2b对应实施例中的服务器10f)获取前端设备(如上述图2a-图2b对应实施例中的用户终端10a)发送的待解析模板文件(如上述图2a所对应实施例中的模板文件20a),称为目标模板文件。读取目标模板文件中所包含的多个内容字符,作为目标内容字符串,当然,后端设备和前端设备也可以是同一个智能终端。
后端设备将目标内容字符串划分为属于逻辑运算类型的第一字符序列(如图2a对应实施例中的字符序列20c)和属于通用字符类型的第二字符序列(如图2a对应实施例中的字符序列20b),其中逻辑运算或逻辑变量的字符序列属于逻辑运算类型;常规字符串或者不涉及逻辑的字符序列属于通用字符类型。
下面对如何确定第一字符序列进行具体的说明:后端设备获取逻辑匹配模式,该逻辑匹配模式可以包括逻辑字符对(如图2a所对应实施例中的逻辑字符对<%%>),逻辑字符对是用于标识模板文件中的逻辑运算部分或者逻辑变量部分。例如,逻辑字符对之间的字符即是逻辑运算字符或者是逻辑变量字符,逻辑字符对可以是<%%>、{%%}或者{{}}等。
后端设备将逻辑字符对与目标内容字符串进行正则匹配,即是在目标内容字符串中查找与逻辑字符对相同的字符对,称为匹配字符对,可以知道匹配字符对包括两个字符,分别称为第一匹配字符和第二匹配字符,其中在目标内容字符串中,按照阅读顺序第一匹配字符串在前,第二匹配字符串在后。
后端设备从目标内容字符串中提取字符序列,作为第一字符序列,其中第一字符序列是以第一匹配字符为字符序列起点、以第二匹配字符为字符序列终点的字符序列。由于第一匹配字符和第二匹配字符是用于标识目标内容字符串中的逻辑运算或逻辑变量,因此也可以将第一字符序列称为属于逻辑运算类型的字符序列。至此,后端设备就根据逻辑字符对确定了目标内容字符串中的逻辑部分(即是第一字符序列)。
后端设备将目标内容字符串中除第一字符序列以外的字符序列作为第二字符序列(如上述图2a所对应实施例中的字符序列20b)。
由于第一字符序列是属于逻辑运算类型的字符序列,那么对应地第二字符序列就是常规字符串或者不涉及逻辑的字符序列,也可以称为属于通用字符类型的字符序列。
下面对如何根据匹配字符对确定第二字符序列进行具体说明:获取目标内容字符串中的第一个第一匹配字符在目标内容字符串中的首位位置下标,作为起始下标,对应地获取第一个第二匹配字符(此处的第一个第二匹配字符和前述中的第一个第一匹配字符即是一个匹配字符对)在目标内容字符串中的首位位置下标,作为终止下标。获取目标内容字符串中处于首位位置的字符的位置下标,作为游标。后端设备将处于游标和起始下标区间(该区间是左闭右开区间)内的字符序列,作为第一目标子序列。
这样就确定了的一个第一目标子序列,后端设备将终止下标相邻的位置下标作为游标,即游标=终止下标+1,根据下一个匹配字符对中的第一匹配字符确定下一个起始下标,根据下一个匹配字符对中的第二匹配字符确定下一个终止下标,然后再将游标和起始下标区间的字符序列作为第一目标子序列,再将当前的终止下标+1作为游标,直到目标内容字符串中的所有匹配字符对均参与了运算,即是直到确定出目标内容字符串中的所有第一目标子序列。
后端设备获取目标内容字符串中处于末位位置的字符的位置下标,作为末尾下标。将处于最后一次确定的游标(也即是最后一个匹配字符对中的第二匹配字符的位置下标+1所得到的位置下标)和上述末尾下标区间(该区间是左闭右闭区间)的字符序列作为第二目标子序列;当然,若最后一个匹配字符对中的第二匹配字符的位置下标和末尾下标相同,那么第二目标子序列就为空(这是因为游标=终止下标+1,而当前的终止下标已经是末尾了,那么就不存在游标),对应地只需要将所有的第一目标子序列确定为第二字符序列即可。
后端设备将所有的第一目标子序列以及第二目标子序列确定为第二字符序列。
需要说明的是,在将目标内容字符串划分为第一字符序列和第二字符序列时,目标内容字符串中的空格符、换行符、tab符等特殊字符均保留。通过保留上述特殊字符,可以保证解析前的目标模板文件的文件格式、文件排版和解析后所得到的结果文件(也即是代码输出结果)的文件格式、文件排版完全一致,尤其是当目标模板文件属于配置文件时,这种文件格式和文件排版上的一致性可以保证能够直接使用解析后所得到的结果文件,而不必再做任何的内容排版上的调整或者内容格式上的转换。
请参见图3b,是本发明实施例提供的一种确定第一字符序列以及第二字符序列的示意图,如图3b所示,目标内容字符串为:“aa<%=bbbb%>c<%=ddd%>eeeee”逻辑字符对为:<%%>,将该逻辑字符对与目标内容字符串中的字符进行正则匹配,可以在目标内容字符串中确定两个匹配字符对,分别为<%=bbbb%>对应的匹配字符对<%%>,以及<%=ddd%>对应的匹配字符对<%%>。确定了匹配字符对后,后端设备可以以匹配字符中的第一匹配字符和第二匹配字符分别为起点和终点,确定两个第一字符序列,分别为:“<%=bbbb%>”和“<%=ddd%>”。
对第一个匹配字符对“<%=bbbb%>”来说,起始下标为字符“<%”所在的位置下标,起始下标=2,终止下标为字符“%>”所在的位置下标,终止下标=8,且当前游标为位于首位位置的字符的位置下标,游标=0,可以将处于游标和起始下标区间(该区间是左闭右开区间)的字符序列作为第一目标子序列:aa。将游标设置为终止下标+1,当前游标=9。
对第二个匹配字符对“<%=ddd%>”来说,起始下标为字符“<%”所在的位置下标,起始下标=10,终止下标为字符“%>”所在的位置下标,终止下标=15,且游标=9,可以将处于游标和起始下标区间(该区间是左闭右开区间)的字符序列再作为第一目标子序列:c,那么当前就存在两个第一目标子序列:“aa”、“c”。再将游标设置为终止下标+1,当前游标=16。
末尾下标为位于末尾位置的字符的位置下标,末尾下标=20,且末尾下标与最后一个匹配字符对中的第二字符所对应的位置下标不同(即当前的终止下标15与末尾下标20不同),将处于游标和末尾下标区间(该区间是左闭右闭区间)的字符序列作为第二目标子序列:“eeeee”。因此,第二字符序列包括2个第一目标序列:“aa”、“c”和1个第二目标序列:“eeeee”。
可选的,前端设备向后端设备发送待解析的模板文件后,后端设备需要检测待解析的模板文件中的逻辑部分是否采用逻辑字符对进行标识,只有采用逻辑字符对标识模板文件中的逻辑部分,后端设备才可以进行后续的解析操作。
检测的具体过程为:获取前端设备发送的原始模板文件,提取原始模板文件中用于标识变量(也可以称为逻辑变量)的模板变量标识符,以及提取用于标识表达式(也可以称为逻辑运算)的模板表达式标识符。若原始模板文件中的模板变量标识符与模板表达式标识符均与逻辑字符对相同,后端设备就可以将原始模板文件确定为目标模板文件,进而进行后续的模板文件解析操作。当然,若原始模板文件中的模板变量标识符,或者模板表达式标识符与逻辑字符对不相同,说明后端设备不能对原始模板文件进行解析,可以向前端设备发送提示消息,该提示消息用于提示用户原始模板文件不满足要求,需要重新修改原始模板文件。
例如,原始模板文件中使用{%%}标识变量c:{%=c%},即模板变量标识符为{%%},若逻辑字符对为<%%>,由于模板变量标识符“{%%}”与逻辑字符对“<%%>”不同,因此不能对原始模板文件进行后续的解析操作。
步骤S102,从所述第一字符序列中提取逻辑字符串。
具体的,后端设备将第一字符序列中的位于匹配字符对之间的字符串作为待确定字符串。对每个待确定字符串分别进行检测,若待确定字符串包括逻辑关键字,则可以将该待确定字符串确定为表达式字符串,其中逻辑关键字可以是:if、for、else、switch、case、break或者var等。
若待确定字符串包含目标变量标识符,则可以将该待确定字符串中除上述目标变量标识符以外的字符串,作为变量字符串。其中目标变量标识符可以是:“=”。
若待确定字符串既不包含逻辑关键字,也不包括目标变量标识符,后端设备可以直接将该待确定字符串确定为变量字符串。后端设备可以将从第一字符序列中确定的表达式字符串和变量字符串均确定为逻辑字符串,即逻辑字符串可以包括表达式字符串和变量字符串
举例来说,两个第一字符序列分别为:“<%=name%>”,和“<%var result=”;if((a+b)===c)%>”,对第一字符序列“<%=name%>”来说,提取出待确定字符串“=name”,由于该待确定字符串包括目标变量标识符“=”,因此后端设备可以将上述待确定字符串中除目标变量标识符以外的字符串作为变量字符串,即字符串“name”为变量字符串;对第一字符序列“<%var result=”;if((a+b)===c)%>”来说,提取出待确定字符串“var result=”;if((a+b)===c)”,由于该待确定字符串存在逻辑关键字“var”、“if”,因此后端设备可以将上述待确定字符串直接作为表达式字符串,即字符串“var result=”;if((a+b)===c)”为表达式字符串为。
步骤S103,根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串。
具体的,后端设备首先生成用于执行第一命令的第一命令字符串,其中第一命令是创建目标数组的命令。例如,第一命令字符串可以是:var r=[];或者r=[];其中r是数组的名称。
对逻辑字符串中的变量字符串来说,生成用于执行第二命令的第二命令字符串,其中第二命令是向目标数组添加变量的命令。例如,第二命令字符串可以是:r.push(c);或者r.input(c);或者r.put(c);其中“c”是变量字符串,r是目标数组。
对第二字符序列来说,生成用于执行第三命令的第三命令字符串,其中第三命令是向目标数组添加第二字符序列的命令。例如,第三命令字符串可以是:r.push(`请计算a+b的和?`);或者r.input(`请计算a+b的和?`);或者r.put(`请计算a+b的和?`);其中“请计算a+b的和?”属于第二字符序列,r是目标数组。当然,若第二字符序列包括多个第一目标子序列以及一个第二目标子序列,那么后端设备需要为每个第一目标子序列和第二目标子序列生成对应的第三命令字符串。
可以知道,每个变量字符串都存在与之对应的第二命令字符串,第二字符序列中的每个第一目标子序列、第二目标子序列都存在与之对应的第三命令字符串。由于表达式字符串已经是逻辑运算的表达式,因此不用为表达式字符串再生成命令字符串,即表达式字符串已经是命令字符串了。可以理解的是,若目标模板文件中不包括变量字符串,当然就不必生成第二命令字符串;若目标模板文件中不包括第二字符序列,当然就不必生成第三命令字符串。
后端设备根据每个变量字符串、第二字符序列中以及表达式字符串在目标内容字符串中的位置信息,依次将对应的第一命令字符串、第二命令字符串、第三命令字符串以及表达式字符串组合为目标命令字符串(如图2a中的命令字符串集合20d),目标命令字符串是满足编程语言语法规则的代码语句,可以用于作为函数的函数体。其中第一命令字符串位于目标命令字符串中的首位,其余的第二命令字符串、第三命令字符串以及表达式字符串就根据对应的变量字符串、第二字符序列以及表达式字符串在目标内容字符串中的位置,进行组合。
举例来说,目标模板文件为:
请计算a+b是否等于c?
答案:<%=result%>
可以知道,“请计算a+b是否等于c?”以及“答案:”均属于第二字符序列中的第一目标子序列;
“result”属于变量字符串。
后端设备首先生成创建目标数组r的第一命令字符串:var r=[];
由于第二字符序列包括2个第一目标子序列(该举例中第二目标子序列为空,也即是说不存在第二目标子序列),对应地分别生成向目标数组r添加第一目标子序列“请计算a+b是否等于c?”的第三命令字符串:r.push(`请计算a+b是否等于c?`);
以及生成向目标数组r添加第一目标子序列“答案:”的第三命令字符串:r.push(`答案:`);
生成向目标数组r添加变量result的第二命令字符串:r.push(result);
根据第一目标子序列、表达式字符串以及变量字符串在目标模板文件中的前后位置顺序,将上述第一命令字符串、第二命令字符串、第三命令字符串以及表达式字符串组合为目标命令字符串为:
上述可以,生成的目标命令字符串中保留了目标模板文件中的空格符,通过保留换行符、空格符等特殊字符,使得目标命令字符串与目标模板文件的排版保持一致,同时上述目标命令字符串即是满足javescript语法规则的代码语句。
S104,在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
具体的,后端设备创建多个沙箱(Sandboxie),称为安全沙箱,其中沙箱是一个虚拟系统程序,沙箱创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可以用来测试不受信任的应用程序或上网行为。
在每个安全沙箱中都添加解析执行接口,用于解析目标命令字符串。可以知道为了解析目标命令字符串,每个安全沙箱中都存在代码编译环境,例如js语言的node.js编译环境,C语言的GCC编译环境等。为了细化交互过程,上述生成目标命令字符串等步骤可以是由后端设备中的客制化后端服务接口来完成。
从多个安全沙箱中选择目标安全沙箱,客制化后端服务接口根据目标命令字符串生成内部发送请求,将携带目标命令字符串的内部发送请求通过tcp(TransmissionControl Protocol,传输控制协议)或者http(HyperText Transfer Protocol,超文本传输协议)发送至目标安全沙箱。目标安全沙箱中的解析执行接口调用函数生成对象function,以将目标命令字符串转换为可执行函数代码,也就是说通过函数生成对象function生成可执行函数,该可执行函数的函数主体是通过目标命令字符串创建的。
生成了可执行函数代码后,基于代码编译环境,目标安全沙箱中解析执行接口可以运行该可执行函数代码,也就是按照可执行函数代码中的第一命令字符串、第二命令字符串、第三命令字符串以及表达式字符串的的先后顺序,分别执行第一命令、第二命令以及第三命令。
从前述中对各命令的描述可知,运行可执行函数代码后,就会生成目标数组,同时会向目标数组中添加字符串或者变量。运行结束后,解析执行接口将目标数组中的所有数组元素组合为代码输出结果,该代码输出结果即是解析执行接口在目标安全沙箱中解析目标模板文件后所得到的解析结果。
当后端设备获取到目标安全沙箱发送的正常结果消息时,接收目标安全沙箱发送的代码输出结果,并将代码输出结果发送至前端设备,前端设备在屏幕上预览该代码输出结果。
请参见图4,是本发送实施例提供的一种确定目标命令字符串的流程示意图,确定目标命令字符串的具体过程包括步骤S201-步骤S215:
步骤S201,获取目标模板文件,读取目标模板文件中包含的内容字符串作为目标内容字符串。
具体的,后端设备接收前端设备发送的待解析的目标模板文件,读取目标模板文件中所包含的内容字符串,作为目标内容字符串,目标内容字符串可以用tmpstr表示。
步骤S202,初始化定义代码字符串变量,并初始化定义游标。
具体的,定义代码字符串变量code,并生成用于执行第一命令的第一命令字符串“var r=[]”,其中第一命令是创建目标数组的命令。后端设备将代码字符串变量code赋值为第一命令字符串,同时,定义游标cur,并将游标cur赋值为目标内容字符串tmpstr中首位字符的位置下标,即是数值0。
步骤S203,循环匹配目标内容字符串tmpstr中逻辑字符对。
具体的,获取逻辑匹配模式,其中逻辑匹配模式包括逻辑字符对<%%>。在目标内容字符串tmpstr中查找逻辑字符对,作为匹配字符对<%%>,匹配字符对包括:第一匹配字符<%,以及第二匹配字符%>。后端设备获取第一匹配字符<%在目标内容字符串tmpstr中的位置下标,作为起始下标start;获取第二匹配字符%>在目标内容字符串tmpstr中的位置下标,作为终止下标end。
步骤S204,提取第一目标子序列。
具体的,从目标内容字符串tmpstr中提取处于游标cur以及起始下标start之间的字符序列,作为第一目标子序列a,生成用于执行第三命令的第三命令字符串,其中第三命令是向目标数组中添加第一目标子序列a,第三命令字符串可以为:r.push(‘a’)。后端设备将第三命令字符串与代码字符串变量code进行组合,组合后代码字符串变量code包括:varr=[];r.push(‘a’);
步骤S205,提取待确定字符串。
具体的,从目标内容字符串tmpstr中提取处于起始下标start以及终止下标end之间的字符序列,作为待确定字符串matchedstr。
步骤S206,检测待确定字符串matchedstr是否为<%=b%>格式。
具体的,后端设备检测待确定字符串matchedstr是否为<%=b%>格式,或者后端设备检测待确定字符串matchedstr是否包含目标变量标识符“=”,若检测结果为“是”,执行步骤S207,若检测结果为“否”,执行步骤S208。
步骤S207,提取变量字符串。
具体的,后端设备提取待确定字符串matchedstr中除目标变量标识符“=”以外的字符串,作为变量字符串b。生成用于执行第二命令的第二命令字符串,其中第二命令是向目标数组中添加变量b,第二命令字符串为:r.push(b)。后端设备将第二命令字符串与代码字符串变量code进行组合,组合后代码字符串变量code包括:var r=[];r.push(‘a’);r.push(b)。
步骤S208,提取<%以及%>之间的字符串,作为字符串c。
步骤S209,判断字符串c是否包含逻辑关键字,若不包含逻辑关键字,则执行步骤S210;若包含逻辑关键字,则执行步骤S211。
步骤S210,生成第二命令字符串,并更新代码字符串变量。
具体的,若不包含逻辑关键字,则生成用于执行第二命令的第二命令字符串,其中第二命令是向目标数组中添加变量c,第三命令字符串为:r.push(c)。后端设备将第二命令字符串与代码字符串变量code进行组合,组合后代码字符串变量code包括:var r=[];r.push(‘a’);r.push(c)。
步骤S211,提取表达式字符串,并更新代码字符串变量。
具体的,若包含逻辑关键字,则将字符串c直接确定为表达式字符串,后端设备将表达式字符串与代码字符串变量code进行组合,组合后代码字符串变量code包括:var r=[];r.push(‘a’);c。后端设备将游标cur赋值为终止下标end+1。
步骤S212,判断目标内容字符串tmpstr中是否还存在匹配字符对<%%>未参与运算。若存在就再执行步骤S203,再次更新代码字符串变量code;若不存在,执行步骤S213。
步骤S213,将游标cur和目标内容字符串tmpstr中位于末尾字符的位置下标之间的字符,作为字符串d(即是第二目标子序列)。
步骤S214,生成用于执行第三命令的第三命令字符串,其中第三命令是向目标数组中添加字符串d,第三命令字符串为:r.push(‘d’)。后端设备将上述第三命令字符串与代码字符串变量code进行组合,组合代码字符串变量code包括:var r=[];r.push(‘a’);c;r.push(‘d’);或者var r=[];r.push(‘a’);r.push(c);r.push(‘d’);或者var r=[];r.push(‘a’);r.push(b);r.push(‘d’)。
步骤S215,将代码字符串变量code作为目标命令字符串。
上述可知,只需要根据模板文件所包含的内容字符串就可以解析模板文件,而不需要检测模板文件的文件类型以及模板语言,高通用性的模板文件解析方法可以解析多种不同类型的模板文件;尤其是当存在多个不同类型的模板文件需要解析时,通用性的模板解析方法可以提高模板文件的解析效率;进一步地,在独立的沙箱环境中运行函数代码,可以隔离宿主系统,提高系统安全性。
请参见图5,是本发明实施例提供的一种确定代码输出结果的示意图。如图5所示,确定代码输出结果的具体过程包括如下步骤S301-步骤S304,且步骤S301-步骤S304为图3a所对应实施例中步骤S104的一个具体实施例:
步骤S301,基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱。
具体的,基于容器引擎Docker以及环境镜像,在后端设备中启动多个安全沙箱,环境镜像是用于保证每个安全沙箱中都存在代码编译环境;环境镜像的类型是根据目标命令字符串所满足的语法规则对应的语言决定的;例如若前述中目标命令字符串满足javescript语法规则,此处的环境镜像可以是js的环境镜像;若前述中目标命令字符串满足C语法规则,此处的环境镜像可以是C语言的环境镜像。当目标命令字符串满足javescript语法规则时,创建的安全沙箱可以是VM2(Virtual Machine)沙箱,VM2沙箱是基于node.js的VM模块改进的安全沙箱,可以用来在V8虚拟机环境中编译执行JS代码,也就是说每个安全沙箱都是node.js的实例,同时为每个安全沙箱都添加解析执行接口,用于在代码编译环境下解析目标命令字符串。
由于存在多个安全沙箱,在Docker容器中启动多个安全沙箱时,可以配置pm2(process manager)管理器用于管理多个安全沙箱,pm2管理器可以实现同时起多个node.js实例,并能做到负载均衡和进程出错时实时重启node。
Pm2管理器可以从多个安全沙箱中选择满足负载均衡条件的安全沙箱,作为目标安全沙箱,其中满足负载均衡条件的安全沙箱是指pm2管理器会根据当前所有安全沙箱的工作运行情况,选择空闲,或者任务量少的安全沙箱作为目标安全沙箱,这样即使出现高并发的情况(例如存在多个目标模板文件需要同时解析),也可是使得计算资源以及网络资源得到合理的分配。
步骤S302,生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码。
具体的,在后端设备中定制客制化后端服务接口,前述步骤S101-步骤S103中所涉及生成目标命令字符串就由该过程客制化后端服务接口执行。
客制化后端服务接口根据目标命令字符串生成内部发送请求,该内部发送请求携带目标命令字符串。客制化后端服务接口将携带有目标命令字符串的内部发送请求通过tcp或者http发送至目标安全沙箱。目标安全沙箱中的解析执行接口调用函数生成对象function,以将目标命令字符串转换为可执行函数代码,也就是说通过函数生成对象function生成可执行函数,该可执行函数的函数主体即是目标命令字符串。其中,调用函数生成对象的命令语句可以为:var function1=new function(arg1,arg2,...,argN,function_body),该命令可以解释为:将目标命令字符串作为function_body参数传递至函数生成对象,即可以生成函数名为function1的可执行函数代码,其中arg1,arg2,...,argN是可执行函数代码中的目标变量(即是目标模板文件中变量字符串中的目标变量),且生成的函数名为function1的可执行函数在目标安全沙箱中是可直接运行的。
步骤S303,在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果。
具体的,目标安全沙箱中的解析执行接口运行该可执行函数代码,即在目标安全沙箱中运行第一命令,以创建目标数组;若目标模板文件中变量字符串中的目标变量存在对应的输入参数(如图2a对应实施例中的输入参数20e),客制化后端服务接口获取该输入参数,同样地通过内部发送请求将输入参数发送至目标安全沙箱。在目标安全沙箱中,解析执行接口运行第二命令,以生成与输入参数以及目标变量对应的结果变量值,并将结果变量值作为数组元素添加至目标数组中。
例如,变量字符串中的目标变量c对应的第二命令字符串为:c=a+b,与目标变量c对应的输入参数a=1,b=1;运行该第二命令字符串对应的第二命令,可以得到c=2,就将数值2作为数组元素添加至目标数组中。
下面对如何获取输入参数进行说明:用户可以手动向后端设备输入目标变量对应的输入变量值,后端设备将上述输入变量值作为输入参数;或者后端设备通过用户在目标用户界面的操作行为自动生成界面变量值,后端设备同样地将上述界面变量值作为输入参数。
在目标安全沙箱中,解析执行接口运行第三命令,以将第二字符序列作为数组元素添加至目标数组中。解析执行接口将所有的数组元素(如图5中的数组元素1、数组元素2、数组元素3等)组合为代码输出结果,可以是当可执行函数代码运行完毕后,解析执行接口将目标数组中的所有数组元素组合为代码输出结果;也可以是在运行可执行函数代码过程中,只要向目标数组添加了数组元素就进行组合,直到可执行函数代码运行完毕后,将最后的组合结果作为代码输出结果。
步骤S304,当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
具体的,解析执行接口在运行可执行函数代码过程中,持续监控可执行函数代码是否存在恶意行,例如,删除系统文件、恶意消耗内存、不间断地向目标数组添加数组元素等均属于恶意行为。
若解析执行接口检测到可执行函数代码不存在恶意行为,当可执行函数代码运行完毕后,目标安全沙箱中的解析执行接口生成正常结果消息,并将该正常结果消息反馈至客制化后端服务接口,同时解析执行接口还将解析后得到的代码输出结果发送至客制化后端服务接口。客制化后端服务接口接收到正常结果消息后,可以接收解析执行接口发送的代码输出结果,客制化后端服务接口再向前端设备转发该代码输出结果,以使前端设备显示该代码输出结果。
若解析执行接口检测到可执行函数代码存在恶意行为,目标安全沙箱中的解析执行接口生成异常结果消息,并向客制化后端服务接口反馈该异常结果消息;同时,解析执行接口停止运行该可执行函数代码,并通知pm2管理器关闭目标安全沙箱对应的进程。客制化后端服务接口接收到异常结果消息后,生成异常提示消息,并将该异常提示消息转发至前端设备。例如,异常提示消息可以是:您的模板文件中存在恶意行为,请检查!
请一并参见图6,是本发明实施例提供的一种数据处理的交互示意图。如图6所示,前端设备向后端设备发送待解析的目标模板文件,后端设备中的客制化后端服务接口根据目标模板文件生成目标命令字符串,其中生成目标命令字符串的具体过程可以参数上述图4实施例中的步骤S201-步骤S215。
客制化后端服务接口可以进一步获取目标命令字符串中目标变量对应的输入参数,其中输入参数可以是用户手动输入的输入变量值,或者是界面变量值,其中用户在目标用户界面中的操作行为会触发后端设备自动生成界面变量值。基于容器引擎docker以及js的环境镜像启动多个VM2沙箱(也就是前述中的安全沙箱),每个VM2沙箱也是一个Node.js实例。
为每个VM2沙箱中设置用于解析目标命令字符串的解析执行接口,同时为多个VM2沙箱配置pm2管理器,pm2管理器从多个VM2沙箱选择目标安全沙箱。客制化后端服务接口将目标命令字符串以及输入参数传递至目标安全沙箱,目标安全沙箱中的解析执行接口将目标命令字符串转换为可执行函数代码,并在目标安全沙箱中运行该可执行函数代码。
运行结束后将生成的目标数组中的数组元素组合为代码输出结果。客制化后端服务接口中的处理程序接收目标安全沙箱发送的代码输出结果,并将代码输出结果转发至前端设备,前端设备可以向用户显示该代码输出结果。其中解析目标命令字符串的具体过程可以参见上述图5对应实施例中的步骤S301-步骤S304。
上述可知,只需要根据模板文件所包含的内容字符串就可以解析模板文件,而不需要检测模板文件的文件类型以及模板语言,高通用性的模板文件解析方法可以解析多种不同类型的模板文件;尤其是当存在多个不同类型的模板文件需要解析时,通用性的模板解析方法可以提高模板文件的解析效率;进一步地,在独立的沙箱环境中运行函数代码,可以隔离宿主系统,提高系统安全性。
进一步的,请参见图7,是本发明实施例提供的一种数据处理装置的结构示意图。如图7所示,数据处理装置1可以应用于上述图3a-图6对应实施例中的后端设备,数据处理装置1可以包括:获取模块11、划分模块12、提取模块13、生成模块14、运行模块15。
获取模块11,用于获取前端设备发送的目标模板文件;
划分模块12,用于将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;
提取模块13,用于从所述第一字符序列中提取逻辑字符串;
生成模块14,用于根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串;
运行模块15,用于在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
其中,获取模块11、划分模块12、提取模块13、生成模块14、运行模块15的具体功能实现方式可以参见上述图3a对应实施例中的步骤S101-步骤S104,这里不再进行赘述。
请参见图7,逻辑字符串包括表达式字符串和变量字符串;
生成模块14可以包括:生成单元141、组合单元142。
生成单元141,用于生成用于执行第一命令的第一命令字符串,所述第一命令是创建目标数组的命令;
所述生成单元141,还用于根据所述变量字符串,生成用于执行第二命令的第二命令字符串,所述第二命令是向所述目标数组添加变量的命令;
所述生成单元141,还用于根据所述第二字符序列,生成用于执行第三命令的第三命令字符串,所述第三命令是向所述目标数组添加所述第二字符序列的命令;
组合单元142,用于根据所述变量字符串、所述第二字符序列和所述表达式字符串在所述目标内容字符串中的位置信息,将所述第一命令字符串、所述第二命令字符串、所述第三命令字符串和所述表达式字符串组合为所述目标命令字符串。
其中,生成单元141、组合单元142的具体功能实现方式可以参见上述图3a对应实施例中的步骤S103,这里不再进行赘述。
请参见图7,运行模块15可以包括:选择单元151、转换单元152、运行单元153、接收单元154。
选择单元151,用于基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱;
转换单元152,用于生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码;
运行单元153,用于在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果;
接收单元154,用于当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
其中,选择单元151、转换单元152、运行单元153、接收单元154的具体功能实现方式可以参见上述图5对应实施例中的步骤S301-步骤S304,这里不再进行赘述。
请参见图7,运行模块15可以包括:选择单元151、转换单元152、运行单元153、接收单元154,还可以包括:停止单元155。
停止单元155,用于当获取到所述目标安全沙箱所反馈的异常结果消息时,停止运行所述可执行函数代码,并关闭所述目标安全沙箱对应的进程,生成异常提示消息,并将所述异常提示消息转发至所述前端设备。
其中,停止单元155的具体功能实现方式可以参见上述图5对应实施例中的步骤S304,这里不再进行赘述。
请参见图7,运行单元153可以包括:运行子单元1531、获取子单元1532。
运行子单元1531,用于在所述目标安全沙箱中运行所述第一命令,以创建所述目标数组;
获取子单元1532,用于获取与所述变量字符串中的目标变量对应的输入参数;
所述运行子单元1531,还用于并根据所述内部发送请求将所述输入参数发送至所述目标安全沙箱;
所述运行子单元1531,还用于在所述目标安全沙箱中运行所述第二命令,以生成与所述输入参数和所述目标变量对应的结果变量值,并将所述结果变量值作为数组元素添加至所述目标数组;
所述运行子单元1531,还用于在所述目标安全沙箱中运行所述第三命令,以将所述第二字符序列作为数组元素添加至所述目标数组;
所述运行子单元1531,还用于将所述目标数组中的所有数组元素组合为所述代码输出结果。
其中,运行子单元1531、获取子单元1532的具体功能实现方式可以参见上述图5对应实施例中的步骤S303,这里不再进行赘述。
请参见图7,获取子单元1532可以包括:接收子单元15321、生成子单元15322。
接收子单元15321,用于接收与所述变量字符串中的目标变量对应的输入变量值,将所述输入变量值确定为所述输入参数;或,
生成子单元15322,用于根据目标用户界面生成界面变量值,将所述界面变量值确定为所述输入参数;所述界面变量值是根据用户在所述目标用户界面的操作行为生成的。
其中,接收子单元15321、生成子单元15322的具体功能实现方式可以参见上述图5对应实施例中的步骤S303,这里不再进行赘述。
请参见图7,划分模块12可以包括:读取单元121、匹配单元122、第一确定单元123。
读取单元121,用于读取所述目标模板文件所包含的多个内容字符,作为所述目标内容字符串;
所述读取单元121,还用于获取逻辑匹配模式;所述逻辑匹配模式包括逻辑字符对;
匹配单元122,用于在所述目标内容字符串中确定与所述逻辑字符对满足正则匹配规则的匹配字符对;所述匹配字符对包括第一匹配字符和第二匹配字符;
所述匹配单元122,还用于以所述第一匹配字符为字符序列起点、以所述第二匹配字符为字符序列终点,从所述目标内容字符串中提取字符序列,作为所述第一字符序列;
第一确定单元123,用于将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列。
其中,读取单元121、匹配单元122、第一确定单元123的具体功能实现方式可以参见上述图3a对应实施例中的步骤S101,这里不再进行赘述。
请参见图7,第一确定单元123可以包括:第一确定子单元1231、第二确定子单元1232。
第一确定子单元1231,用于获取所述第一匹配字符在所述目标内容字符串中的首位位置下标,作为起始下标,获取所述第二匹配字符在所述目标内容字符串中的首位位置下标,作为终止下标;
所述第一确定子单元1231,还用于获取所述目标内容字符串中首位字符的位置下标,作为游标;
所述第一确定子单元1231,还用于将处于所述游标和所述起始下标区间内的字符序列,作为第一目标子序列;
所述第一确定子单元1231,还用于将所述终止下标相邻的位置下标确定为所述游标,根据所述第一匹配字符确定下一个起始下标,根据所述第二匹配字符确定下一个终止下标,直至确定出所述目标内容字符串中的所有第一目标子序列;
所述第一确定子单元1231,还用于将处于所述游标和所述目标内容字符串中末位字符的位置下标区间内的字符序列,作为第二目标子序列;
第二确定子单元1232,用于将所有第一目标子序列和所述第二目标子序列确定为所述第二字符序列。
其中,第一确定子单元1231、第二确定子单元1232的具体功能实现方式可以参见上述图4对应实施例中的步骤S204,这里不再进行赘述。
请参见图7,逻辑字符串包括表达式字符串和变量字符串;
提取模块13可以包括:第二确定单元131、第三确定单元132。
第二确定单元131,用于将所述第一字符序列中位于所述匹配字符对之间的字符串,作为待确定字符串;
第二确定单元131,还用于若所述待确定字符串包含逻辑关键字,则将所述待确定字符串确定为所述表达式字符串;
第三确定单元132,用于若所述待确定字符串包含目标变量标识符,则将所述待确定字符串中除所述目标变量标识符之外的字符串,确定为所述变量字符串。
其中,第二确定单元131、第三确定单元132的具体功能实现方式可以参见上述图4对应实施例中的步骤S204-步骤S211,这里不再进行赘述。
请参见图7,获取模块11可以包括:获取单元111、第四确定单元112。
获取单元111,用于获取所述前端设备发送的原始模板文件;
所述获取单元111,还用于提取所述原始模板文件中变量对应的模板变量标识符,并提取所述原始模板文件中表达式对应的模板表达式标识符;
第四确定单元112,用于若所述模板变量标识符与所述模板表达式标识符均与所述逻辑字符对相同,则将所述原始模板文件确定为所述目标模板文件。
其中,获取单元111、第四确定单元112的具体功能实现方式可以参见上述图3a对应实施例中的步骤S101,这里不再进行赘述。
进一步地,请参见图8,是本发明实施例提供的一种电子设备的结构示意图。上述图3a-图6对应实施例中的后端设备可以为电子设备1000,如图8所示,所述电子设备1000可以包括:用户接口1002、处理器1004、编码器1006以及存储器1008。信号接收器1016用于经由蜂窝接口1010、WIFI接口1012、...、或NFC接口1014接收或者发送数据。编码器1006将接收到的数据编码为计算机处理的数据格式。存储器1008中存储有计算机程序,处理器1004被设置为通过计算机程序执行上述任一项方法实施例中的步骤。存储器1008可包括易失性存储器(例如,动态随机存取存储器DRAM),还可以包括非易失性存储器(例如,一次性可编程只读存储器OTPROM)。在一些实例中,存储器1008可进一步包括相对于处理器1004远程设置的存储器,这些远程存储器可以通过网络连接至电子设备1000。用户接口1002可以包括:键盘1018和显示器1020。
在图8所示的电子设备1000中,处理器1004可以用于调用存储器1008中存储计算机程序,以实现:
获取前端设备发送的目标模板文件,将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;
从所述第一字符序列中提取逻辑字符串,根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串;
在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
在一个实施例中,所述逻辑字符串包括表达式字符串和变量字符串;
所述处理器1004在执行根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串时,具体执行以下步骤:
生成用于执行第一命令的第一命令字符串,所述第一命令是创建目标数组的命令;
根据所述变量字符串,生成用于执行第二命令的第二命令字符串,所述第二命令是向所述目标数组添加变量的命令;
根据所述第二字符序列,生成用于执行第三命令的第三命令字符串,所述第三命令是向所述目标数组添加所述第二字符序列的命令;
根据所述变量字符串、所述第二字符序列和所述表达式字符串在所述目标内容字符串中的位置信息,将所述第一命令字符串、所述第二命令字符串、所述第三命令字符串和所述表达式字符串组合为所述目标命令字符串。
在一个实施例中,所述处理器1004在执行在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果时,具体执行以下步骤:
基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱;
生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码;
在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果;
当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
在一个实施例中,所述处理器1004还执行以下步骤:
当获取到所述目标安全沙箱所反馈的异常结果消息时,停止运行所述可执行函数代码,并关闭所述目标安全沙箱对应的进程,生成异常提示消息,并将所述异常提示消息转发至所述前端设备。
在一个实施例中,所述处理器1004在执行在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果时,具体执行以下步骤:
在所述目标安全沙箱中运行所述第一命令,以创建所述目标数组;
获取与所述变量字符串中的目标变量对应的输入参数,并根据所述内部发送请求将所述输入参数发送至所述目标安全沙箱;
在所述目标安全沙箱中运行所述第二命令,以生成与所述输入参数和所述目标变量对应的结果变量值,并将所述结果变量值作为数组元素添加至所述目标数组;
在所述目标安全沙箱中运行所述第三命令,以将所述第二字符序列作为数组元素添加至所述目标数组;
将所述目标数组中的所有数组元素组合为所述代码输出结果。
在一个实施例中,所述处理器1004在执行获取与所述变量字符串中的目标变量对应的输入参数时,具体执行以下步骤:
接收与所述变量字符串中的目标变量对应的输入变量值,将所述输入变量值确定为所述输入参数;或,
根据目标用户界面生成界面变量值,将所述界面变量值确定为所述输入参数;所述界面变量值是根据用户在所述目标用户界面的操作行为生成的。
在一个实施例中,所述处理器1004在执行将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列时,具体执行以下步骤:
读取所述目标模板文件所包含的多个内容字符,作为所述目标内容字符串;
获取逻辑匹配模式;所述逻辑匹配模式包括逻辑字符对;
在所述目标内容字符串中确定与所述逻辑字符对满足正则匹配规则的匹配字符对;所述匹配字符对包括第一匹配字符和第二匹配字符;
以所述第一匹配字符为字符序列起点、以所述第二匹配字符为字符序列终点,从所述目标内容字符串中提取字符序列,作为所述第一字符序列;
将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列。
在一个实施例中,所述处理器1004在执行将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列时,具体执行以下步骤:
获取所述第一匹配字符在所述目标内容字符串中的首位位置下标,作为起始下标,获取所述第二匹配字符在所述目标内容字符串中的首位位置下标,作为终止下标;
获取所述目标内容字符串中首位字符的位置下标,作为游标;
将处于所述游标和所述起始下标区间内的字符序列,作为第一目标子序列;
将所述终止下标相邻的位置下标确定为所述游标,根据所述第一匹配字符确定下一个起始下标,根据所述第二匹配字符确定下一个终止下标,直至确定出所述目标内容字符串中的所有第一目标子序列;
将处于所述游标和所述目标内容字符串中末位字符的位置下标区间内的字符序列,作为第二目标子序列;
将所有第一目标子序列和所述第二目标子序列确定为所述第二字符序列。
在一个实施例中,所述逻辑字符串包括表达式字符串和变量字符串;
所述处理器1004在执行从所述第一字符序列中提取逻辑字符串时,具体执行以下步骤:
将所述第一字符序列中位于所述匹配字符对之间的字符串,作为待确定字符串;
若所述待确定字符串包含逻辑关键字,则将所述待确定字符串确定为所述表达式字符串;
若所述待确定字符串包含目标变量标识符,则将所述待确定字符串中除所述目标变量标识符之外的字符串,确定为所述变量字符串。
在一个实施例中,所述处理器1004在执行获取前端设备发送的目标模板文件时,具体执行以下步骤:
获取所述前端设备发送的原始模板文件;
提取所述原始模板文件中变量对应的模板变量标识符,并提取所述原始模板文件中表达式对应的模板表达式标识符;
若所述模板变量标识符与所述模板表达式标识符均与所述逻辑字符对相同,则将所述原始模板文件确定为所述目标模板文件。
应当理解,本发明实施例中所描述的电子设备1000可执行前文图3a到图6所对应实施例中对所述数据处理方法的描述,也可执行前文图7所对应实施例中对所述数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本发明实施例还提供了一种计算机存储介质,且所述计算机存储介质中存储有前文提及的数据处理装置1所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图3a到图6所对应实施例中对所述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本发明所涉及的计算机存储介质实施例中未披露的技术细节,请参照本发明方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (15)
1.一种数据处理方法,其特征在于,包括:
获取前端设备发送的目标模板文件,将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;
从所述第一字符序列中提取逻辑字符串,根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串;
在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
2.根据权利要求1所述的方法,其特征在于,所述逻辑字符串包括表达式字符串和变量字符串;
所述根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串,包括:
生成用于执行第一命令的第一命令字符串,所述第一命令是创建目标数组的命令;
根据所述变量字符串,生成用于执行第二命令的第二命令字符串,所述第二命令是向所述目标数组添加变量的命令;
根据所述第二字符序列,生成用于执行第三命令的第三命令字符串,所述第三命令是向所述目标数组添加所述第二字符序列的命令;
根据所述变量字符串、所述第二字符序列和所述表达式字符串在所述目标内容字符串中的位置信息,将所述第一命令字符串、所述第二命令字符串、所述第三命令字符串和所述表达式字符串组合为所述目标命令字符串。
3.根据权利要求2所述的方法,其特征在于,所述在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果,包括:
基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱;
生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码;
在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果;
当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
4.根据权利要求3所述的方法,其特征在于,还包括:
当获取到所述目标安全沙箱所反馈的异常结果消息时,停止运行所述可执行函数代码,并关闭所述目标安全沙箱对应的进程,生成异常提示消息,并将所述异常提示消息转发至所述前端设备。
5.根据权利要求3所述的方法,其特征在于,所述在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果,包括:
在所述目标安全沙箱中运行所述第一命令,以创建所述目标数组;
获取与所述变量字符串中的目标变量对应的输入参数,并根据所述内部发送请求将所述输入参数发送至所述目标安全沙箱;
在所述目标安全沙箱中运行所述第二命令,以生成与所述输入参数和所述目标变量对应的结果变量值,并将所述结果变量值作为数组元素添加至所述目标数组;
在所述目标安全沙箱中运行所述第三命令,以将所述第二字符序列作为数组元素添加至所述目标数组;
将所述目标数组中的所有数组元素组合为所述代码输出结果。
6.根据权利要求5所述的方法,其特征在于,所述获取与所述变量字符串中的目标变量对应的输入参数,包括:
接收与所述变量字符串中的目标变量对应的输入变量值,将所述输入变量值确定为所述输入参数;或,
根据目标用户界面生成界面变量值,将所述界面变量值确定为所述输入参数;所述界面变量值是根据用户在所述目标用户界面的操作行为生成的。
7.根据权利要求1所述的方法,其特征在于,所述将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列,包括:
读取所述目标模板文件所包含的多个内容字符,作为所述目标内容字符串;
获取逻辑匹配模式;所述逻辑匹配模式包括逻辑字符对;
在所述目标内容字符串中确定与所述逻辑字符对满足正则匹配规则的匹配字符对;所述匹配字符对包括第一匹配字符和第二匹配字符;
以所述第一匹配字符为字符序列起点、以所述第二匹配字符为字符序列终点,从所述目标内容字符串中提取字符序列,作为所述第一字符序列;
将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列。
8.根据权利要求7所述的方法,其特征在于,所述将所述目标内容字符串中除所述第一字符序列之外的字符序列作为所述第二字符序列,包括:
获取所述第一匹配字符在所述目标内容字符串中的首位位置下标,作为起始下标,获取所述第二匹配字符在所述目标内容字符串中的首位位置下标,作为终止下标;
获取所述目标内容字符串中首位字符的位置下标,作为游标;
将处于所述游标和所述起始下标区间内的字符序列,作为第一目标子序列;
将所述终止下标相邻的位置下标确定为所述游标,根据所述第一匹配字符确定下一个起始下标,根据所述第二匹配字符确定下一个终止下标,直至确定出所述目标内容字符串中的所有第一目标子序列;
将处于所述游标和所述目标内容字符串中末位字符的位置下标区间内的字符序列,作为第二目标子序列;
将所有第一目标子序列和所述第二目标子序列确定为所述第二字符序列。
9.根据权利要求7所述的方法,其特征在于,所述逻辑字符串包括表达式字符串和变量字符串;
所述从所述第一字符序列中提取逻辑字符串,包括:
将所述第一字符序列中位于所述匹配字符对之间的字符串,作为待确定字符串;
若所述待确定字符串包含逻辑关键字,则将所述待确定字符串确定为所述表达式字符串;
若所述待确定字符串包含目标变量标识符,则将所述待确定字符串中除所述目标变量标识符之外的字符串,确定为所述变量字符串。
10.根据权利要求7所述的方法,其特征在于,所述获取前端设备发送的目标模板文件,包括:
获取所述前端设备发送的原始模板文件;
提取所述原始模板文件中变量对应的模板变量标识符,并提取所述原始模板文件中表达式对应的模板表达式标识符;
若所述模板变量标识符与所述模板表达式标识符均与所述逻辑字符对相同,则将所述原始模板文件确定为所述目标模板文件。
11.一种数据处理装置,其特征在于,包括:
获取模块,用于获取前端设备发送的目标模板文件;
划分模块,用于将所述目标模板文件所包含的目标内容字符串,划分为属于逻辑运算类型的第一字符序列和属于通用字符类型的第二字符序列;
提取模块,用于从所述第一字符序列中提取逻辑字符串;
生成模块,用于根据所述逻辑字符串和所述第二字符序列生成用于执行命令的目标命令字符串;
运行模块,用于在目标安全沙箱中根据所述目标命令字符串生成可执行函数代码,并通过在所述目标安全沙箱中运行所述可执行函数代码获取与所述目标模板文件相匹配的代码输出结果,将所述代码输出结果发送至所述前端设备,以使所述前端设备显示所述代码输出结果。
12.根据权利要求11所述的装置,其特征在于,所述逻辑字符串包括表达式字符串和变量字符串;
所述生成模块,包括:
生成单元,用于生成用于执行第一命令的第一命令字符串,所述第一命令是创建目标数组的命令;
所述生成单元,还用于根据所述变量字符串,生成用于执行第二命令的第二命令字符串,所述第二命令是向所述目标数组添加变量的命令;
所述生成单元,还用于根据所述第二字符序列,生成用于执行第三命令的第三命令字符串,所述第三命令是向所述目标数组添加所述第二字符序列的命令;
组合单元,用于根据所述变量字符串、所述第二字符序列和所述表达式字符串在所述目标内容字符串中的位置信息,将所述第一命令字符串、所述第二命令字符串、所述第三命令字符串和所述表达式字符串组合为所述目标命令字符串。
13.根据权利要求12所述的装置,其特征在于,所述运行模块,包括:
选择单元,用于基于容器引擎和环境镜像创建至少一个安全沙箱,从至少一个安全沙箱中选择满足负载均衡条件的目标安全沙箱;
转换单元,用于生成内部发送请求,将携带所述目标命令字符串的所述内部发送请求发送至所述目标安全沙箱,在所述目标安全沙箱中调用函数生成对象,将所述目标模板命令字符串转换为可执行函数代码;
运行单元,用于在所述目标安全沙箱中运行与所述可执行函数代码对应的所述第一命令、所述第二命令和所述第三命令,并将所述目标数组中的数组元素组合为所述代码输出结果;
接收单元,用于当获取到所述目标安全沙箱所反馈的正常结果消息时,接收所述目标安全沙箱发送的所述代码输出结果,并将所述代码输出结果转发至所述前端设备,以使所述前端设备显示所述代码输出结果。
14.一种电子设备,其特征在于,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如权利要求1-10任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910194598.5A CN110210212A (zh) | 2019-03-14 | 2019-03-14 | 一种数据处理方法、装置以及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910194598.5A CN110210212A (zh) | 2019-03-14 | 2019-03-14 | 一种数据处理方法、装置以及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110210212A true CN110210212A (zh) | 2019-09-06 |
Family
ID=67785035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910194598.5A Pending CN110210212A (zh) | 2019-03-14 | 2019-03-14 | 一种数据处理方法、装置以及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110210212A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506330A (zh) * | 2020-04-23 | 2020-08-07 | 北京微纳星空科技有限公司 | 一种程序更新方法、装置、星务计算机及存储介质 |
CN112860552A (zh) * | 2021-02-02 | 2021-05-28 | 北京房江湖科技有限公司 | 关键字机制运行方法和装置 |
CN113703769A (zh) * | 2021-07-16 | 2021-11-26 | 苏州浪潮智能科技有限公司 | 一种cli命令执行方法及相关装置 |
CN113779311A (zh) * | 2020-11-04 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 一种数据处理的方法、装置和存储介质 |
CN114339373A (zh) * | 2022-03-17 | 2022-04-12 | 飞狐信息技术(天津)有限公司 | 一种队列弹幕生成方法、装置、存储介质和设备 |
CN116275587A (zh) * | 2023-04-17 | 2023-06-23 | 霖鼎光学(江苏)有限公司 | 一种激光切割工件的控制系统 |
CN116705171A (zh) * | 2023-05-24 | 2023-09-05 | 西北大学 | 一种批量生物数据处理方法、装置及介质 |
-
2019
- 2019-03-14 CN CN201910194598.5A patent/CN110210212A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506330A (zh) * | 2020-04-23 | 2020-08-07 | 北京微纳星空科技有限公司 | 一种程序更新方法、装置、星务计算机及存储介质 |
CN113779311A (zh) * | 2020-11-04 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 一种数据处理的方法、装置和存储介质 |
CN112860552A (zh) * | 2021-02-02 | 2021-05-28 | 北京房江湖科技有限公司 | 关键字机制运行方法和装置 |
CN112860552B (zh) * | 2021-02-02 | 2023-12-15 | 贝壳找房(北京)科技有限公司 | 关键字机制运行方法和装置 |
CN113703769A (zh) * | 2021-07-16 | 2021-11-26 | 苏州浪潮智能科技有限公司 | 一种cli命令执行方法及相关装置 |
CN113703769B (zh) * | 2021-07-16 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种cli命令执行方法及相关装置 |
CN114339373A (zh) * | 2022-03-17 | 2022-04-12 | 飞狐信息技术(天津)有限公司 | 一种队列弹幕生成方法、装置、存储介质和设备 |
CN114339373B (zh) * | 2022-03-17 | 2022-05-27 | 飞狐信息技术(天津)有限公司 | 一种队列弹幕生成方法、装置、存储介质和设备 |
CN116275587A (zh) * | 2023-04-17 | 2023-06-23 | 霖鼎光学(江苏)有限公司 | 一种激光切割工件的控制系统 |
CN116275587B (zh) * | 2023-04-17 | 2023-10-27 | 霖鼎光学(江苏)有限公司 | 一种激光切割工件的控制系统 |
CN116705171A (zh) * | 2023-05-24 | 2023-09-05 | 西北大学 | 一种批量生物数据处理方法、装置及介质 |
CN116705171B (zh) * | 2023-05-24 | 2024-04-05 | 西北大学 | 一种批量生物数据处理方法、装置及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110210212A (zh) | 一种数据处理方法、装置以及相关设备 | |
CN110221872B (zh) | 页面跳转方法、装置、电子设备和存储介质 | |
CN109885311B (zh) | 一种应用程序的生成方法及设备 | |
CN109918055B (zh) | 一种应用程序的生成方法及设备 | |
CN111045655A (zh) | 一种页面渲染的方法、装置、渲染服务器和存储介质 | |
JP2016524765A (ja) | カスタマイズされたソフトウェア開発キット(sdk)生成のための方法および装置 | |
CN111831538B (zh) | 调试方法、装置以及存储介质 | |
US11699073B2 (en) | Network off-line model processing method, artificial intelligence processing device and related products | |
CN109460250B (zh) | 一种应用程序的生成方法及设备 | |
CN109492181A (zh) | 页面跳转方法、装置、计算机设备和存储介质 | |
CN113722020A (zh) | 接口调用方法、装置和计算机可读存储介质 | |
CN109343926A (zh) | 应用程序图标的显示方法、装置、终端和存储介质 | |
CN113986241A (zh) | 一种基于知识图谱的业务规则的配置方法以及装置 | |
CN110532182B (zh) | 一种虚拟化平台的自动化测试方法及装置 | |
CN108595331B (zh) | 异步接口的测试方法、介质、装置和计算设备 | |
CN108153745B (zh) | 一种应用数据调用方法及应用开发系统 | |
CN105278928A (zh) | Ivr对外接口配置方法及装置 | |
CN110275701A (zh) | 数据处理方法、装置、介质和计算设备 | |
CN109815455A (zh) | 项目文件处理方法和装置 | |
CN113420097B (zh) | 一种数据分析方法、装置、存储介质及服务器 | |
CN115203674A (zh) | 一种应用程序自动登录方法、系统、装置及存储介质 | |
CN113703734A (zh) | 一种小程序生成方法、装置、电子设备及存储介质 | |
Chen et al. | Android stack machine | |
CN110110299A (zh) | 文本变换方法、装置以及服务器 | |
CN109412931A (zh) | 利用即时通讯方式进行知识问答的方法、装置和终端设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |