Coldfusion 使用rereplace在cfhttp文件内容中查找字符串

Coldfusion 使用rereplace在cfhttp文件内容中查找字符串,coldfusion,Coldfusion,我正在使用cfhttp调用一个页面,该页面在该页面中具有非常不同的详细信息,因为它使用脚本标记导航到下一个页面,我无法使用我的代码找到该内容: 下面是如下代码: //window.location.replace("gen.asp?pagenum=-1" ); //window.location.replace("Wait.asp?Request("stateQ") & "&PDF=T" ); //window.location.replace("Gen.asp?stateQ="

我正在使用
cfhttp
调用一个页面,该页面在该页面中具有非常不同的详细信息,因为它使用脚本标记导航到下一个页面,我无法使用我的代码找到该内容:

下面是如下代码:

//window.location.replace("gen.asp?pagenum=-1" );
//window.location.replace("Wait.asp?Request("stateQ") & "&PDF=T" );
//window.location.replace("Gen.asp?stateQ=");
window.location.replace("GenA.asp?companyid=&stateQ=");
如您所见,这里有3个
窗口。替换
,我想获取一个未注释的窗口,并将https://添加到其中,因为url只显示404错误,因为它试图将我的添加到此文件,但找不到该文件

我将cfhttp用作:

<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfoutput>#objget.filecontent#</cfoutput>
<cfif rereplacenocase('^[window.location.replace]$')>

#objget.filecontent#

但我不知道如何继续前进

我对你在这里的目标感到非常困惑,但我觉得这样做是可行的

似乎您正在尝试使用ReReplace like ReFind。我将向您展示:

<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfif ReFind("(GenA.asp\?companyid=(\d*)&stateQ=(\w*))",object.filecontent)>
  <cfset repcontent = ReReplaceNoCase(object.filecontent,"(GenA.asp\?companyid=(\d*)&stateQ=(\w*)","https://...stuff/\1","ALL")>
</cfif>
这更有效,因为不需要if,因此没有性能开销

两者都做了一些假设,但我不确定url是否有空值,因此我将向您展示如何进行替换,而不考虑值

  • (\d*)
    (作为公司ID的值)表示任意位数,0或更多。如果不是数值,可以更改它
  • (\w*)
    (因为stateQ的值表示字母、数字或下划线,任意次数
  • 你会注意到问号的前缀是
    \
    。这不是打字错误,问号在正则表达式中是一个特殊字符,所以你必须转义它
假设这些值比这更复杂,对于iether,您可以将它们更改为
([^&]*)
,例如,这意味着“除与之外的任何字符,0次或更多次。)


或者如果值与您显示的值完全相同

<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfset repcontent = ReplaceNoCase(object.filecontent,"GenA.asp?companyid=&stateQ=","https://...stuff/GenA.asp?companyid=&stateQ=","ALL")>

您将希望对ColdFusion正则表达式使用多行模式,以避免匹配以
/
注释开头的行,例如:

<cfset newcontent = REReplaceNoCase(objget.fileContent, "(?m)^(window\.location\.replace\("")(GenA\.asp\?companyid=&stateQ=)(""\);)$", "\1https://<myurl>/\2\3") />


请注意捕获组的使用。第一个组
\1
将捕获
窗口.位置.替换(“
;第二个
\2
您要捕获的URL,并替换为
https://
URL;第三个
\3
”)
。开始定位点
^
确保我们只获取以
窗口开头的行。位置…
,并避免注释掉那些行。多行模式参数
(?m)
允许这样做,因此锚点
^
$
分别匹配行的开头和结尾,而不是字符串的开头和结尾。此参数的另一种选择是使用Java正则表达式并使用负查找
(?!所有的代码行看起来都被注释掉了。这是你想要的吗?另外,请发布你尝试过的实际代码和结果。上面的代码无效,甚至无法编译。我努力写了一次,但我失败了,因为我不知道怎么写。另外,如果你检查字符串@James,最后一个没有
/
,T如果你不熟悉字符串函数,你应该先从阅读开始。
<cfhttp method="get" url="#pstr#" charset="utf-8" result="objget"/>
<cfset repcontent = ReplaceNoCase(object.filecontent,"GenA.asp?companyid=&stateQ=","https://...stuff/GenA.asp?companyid=&stateQ=","ALL")>
<cfset newcontent = REReplaceNoCase(objget.fileContent, "(?m)^(window\.location\.replace\("")(GenA\.asp\?companyid=&stateQ=)(""\);)$", "\1https://<myurl>/\2\3") />