Удалить из первой черты и за ее пределами - PullRequest
0 голосов
/ 23 ноября 2011

Как бы я удалил все, кроме первого "-pg", используя замену в регулярном выражении coldfusion?

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

Так что в этом случае конечный результат будет

http://www.abc.com/Webpage

Ответы [ 6 ]

1 голос
/ 20 декабря 2011

Попробуйте это:

<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>
1 голос
/ 23 ноября 2011

Я не знаю, почему вы замыкаетесь в решении регулярных выражений.Это должно работать нормально:

<cfset stringToCheck = "http://www.abc.com/Webpage-pg3.html">
<cfset stringToFind = "-pg">

<cfset newString = left(stringToCheck,find(stringToFind,stringToCheck)-1)>
1 голос
/ 23 ноября 2011

Я ничего не знаю о Coldfusion, но это регулярное выражение будет соответствовать -pg и всем после и сохранит его в первой группе захвата:

(-pg.*)

Если вы затем замените его пустой строкой, вы получите желаемый результат. Вы можете увидеть это в действии здесь: http://regexr.com? 2v965

0 голосов
/ 20 декабря 2011

Я собирался предложить то, что уже предложил Джейсон

<cfset part = listFirst(urlString, '-') />

Если есть простой вариант, возьми его.

0 голосов
/ 23 ноября 2011
<cfset string = "http://www.abc.com/Webpage-pg3.html"  />

<cfset new = ReReplace(string,'(.+?)-pg.*','\1','ONE') />

<cfoutput>#new#</cfoutput>

В этом решении я использовал не жадное совпадение до первого появления -pg.

0 голосов
/ 23 ноября 2011

Попробуйте это:

REReplace("http://www.abc.com/Webpage-pg3.html","(.+)-pg.*","\1")

Педантичное редактирование:

REReplace("http://www.abc.com/Webpage-pg3.html","(.+?)-pg.*","\1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...