技术细节
我想从包含参数名称和值的文本文件中提取值。对于以“request.config”开头的每一行。 (有空行、带注释的行等,我不想从中提取任何内容)我想提取这些值(以粗体显示):
请求.配置。我的参数1 = “一些随机字符串”;
我认为最好的方法可能是使用 REGEX,但我该怎么做呢?
我以为会有类似正则表达式的东西可以提取 2 个值request.config.${1} = ${2};
并为每一行检索 ${1} 和 ${2},但前提是它们匹配。
我尝试尝试但没有成功:
<cfset str = "request.config.MY_PARAM_NAME = 'The parameter VALUE!!';">
<cfset arrSearch = rematch("^request.config.(.*?) = (.*?);$", str) >
<cfdump var="#arrSearch#" label="Extracted values">
不幸的是,这段代码给了我已经拥有的完整字符串,我只想要 2 个提取的值!
一些元:我正在尝试做什么
我正在构建一个 Web 应用程序,允许最终用户修改存储在 params_file.cfm 中的一些应用程序参数。我们希望能够在应用程序内完成此操作,而不是让开发人员在文件中手动更改变量。
我的应用程序首先对后端进行 AJAX 调用,后端读取 params 文件,获取所有数据对(param_name、param_value 以及稍后可能的 param_description),并将它们作为 JSON 返回以填充我的列表,我有一个自动完成工具来填充我的列表按名称搜索它们(好奇的可以使用 Typeahead.js)。当我选择参数名称时,该值会与一些用于修改它们的控件一起出现(这些控件取决于数据类型,JQuery 用于确定类型)。
问题是 param_value 可以采取多种形式..因为这个 params 文件是由不同的人维护的,所以它可以有不同的语法。例如,布尔值可以存储为“TRUE”、“true”、TRUE、true(您明白了)。
由于 SerializeJSON 处理类型(布尔值、数字、字符串),我认为我的 REGEX 应该返回不带引号(单引号或双引号)的文本,但我在制作该表达式时遇到了麻烦。
I got
<cfset match = REFind("^request\.config\.(\S+) = ['|""]?(.*)['|""]?;$", str, 1, "Yes")>
我测试了它request.config.my_param_1 = 'MYTEST123';
and it 仅删除第一个单引号,由于某种原因,表达式返回我MYTEST123'
当我不需要任何周围的报价时。我的正则表达式需要帮助