从第一个破折号中删除

时间:2011-11-22 21:21:26

标签: regex coldfusion

如何使用coldfusion正则表达式替换第一个“-pg”之外的所有内容?

http://www.abc.com/Webpage-pg3.html

所以在这种情况下,最终结果将是

http://www.abc.com/Webpage

6 个答案:

答案 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 )

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String

或者你可以跳过正则表达式,并使用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。