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") />