答案 0 :(得分:1)
我对coldfusion一无所知,但这个正则表达式会匹配-pg以及之后的所有内容并将其存储在第一个捕获组中:
(-pg.*)
如果您用空字符串替换它,您将获得所需的结果。你可以在这里看到它:http://regexr.com?2v965
答案 1 :(得分:1)
我不知道你为什么要把自己锁定在正则表达式解决方案中。这应该可以正常工作:
<cfset stringToCheck = "http://www.abc.com/Webpage-pg3.html">
<cfset stringToFind = "-pg">
<cfset newString = left(stringToCheck,find(stringToFind,stringToCheck)-1)>
答案 2 :(得分:1)
试试这个:
<cfscript>
newString = urlString.replaceAll( "-pg.*", "" );
</cfscript>
语法:
String.replaceAll( regex, replacement )
或者你可以跳过正则表达式,并使用java String方法,比如CF9的这个衬里:
<cfscript>
newString = ! urlString.contains( "-pg" ) ? "" : urlString.substring( 0, urlString.indexOf( "-pg" ) );
</cfscript>
对于旧版本的CF,没有三元运算符也是如此:
<cfscript>
if ( urlString.contains( "-pg" ) ) {
newString = urlString.substring( 0, urlString.indexOf( "-pg" ) );
}
else {
newString = "";
}
</cfscript>
在一些基准测试中,似乎String.replaceAll()
方法在我的机器上是最快的。
<cfscript>
old = "http://www.abc.com/Webpage-pg3.html";
// benchmarks
sys = createObject( "java", "java.lang.System" );
// 35072 ns
// 28160 ns
t1 = sys.nanoTime();
new1 = old.replaceAll( "-pg.*", "" );
t1 = sys.nanoTime() - t1;
// 20992 ns
// 18176 ns
t2 = sys.nanoTime();
new2 = old.contains( "-pg" ) ? "" : old.substring( 0, old.indexOf( "-pg" ) );
t2 = sys.nanoTime() - t2;
</cfscript>
答案 3 :(得分:0)
试试这个:
REReplace("http://www.abc.com/Webpage-pg3.html","(.+)-pg.*","\1")
迂腐编辑:
REReplace("http://www.abc.com/Webpage-pg3.html","(.+?)-pg.*","\1")
答案 4 :(得分:0)
我打算提出杰森已经提出的建议
<cfset part = listFirst(urlString, '-') />
如果有一个简单的选择,请接受它。
答案 5 :(得分:-1)
<cfset string = "http://www.abc.com/Webpage-pg3.html" />
<cfset new = ReReplace(string,'(.+?)-pg.*','\1','ONE') />
<cfoutput>#new#</cfoutput>
在这个解决方案中,我使用了非贪婪的匹配,直到第一次出现-pg。