2013-03-13 4 views
0

В основном я ищу для извлечения URL до тех пор, пока не встретится число, которое может или не может присутствоватьИзвлечение частей URL

Примеры:

http://www.test.com/products/cards/product_code/12345/something_else 
http://www.test.com/products/cards/product_code2/ 

Желаемая выход -

http://www.test.com/products/cards/product_code/ 
http://www.test.com/products/cards/product_code2/ 

Дополнительная информация - Language agnostic regex похож на этот вопрос Getting parts of a URL (Regex)

Many Thanks

+1

С помощью какого языка? – Anders

ответ

1

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

Если вы используете PHP, вам нужна функция parse_url.

Если вы используете Perl, вам нужен модуль URI.

Если вы используете Ruby, используйте модуль URI.

+0

.NET имеет метод 'Uri.GetComponents()'. –

+0

Спасибо, есть ли каноническая страница документа в Интернете, на которую я могу ссылаться? Я добавлю его в свой файл клика для ответов на акции. –

+0

MSDN имеет [страницу] (http://msdn.microsoft.com/en-us/library/txt7706a.aspx) в классе 'Uri'; «GetComponents» - один из его методов. –

0

Является ли структура URL одинаковой каждый раз? То есть, можете ли вы просто отключить URL-адрес после S-числа косой черты? Если нет, почему бы и нет?

0

Вот простой регулярное выражение способ сделать это:

<?php 

$url = "http://www.test.com/products/cards/product_code/1234"; 
$pattern = '/\/[0-9]/'; 

preg_match($pattern, $url, $matches); 

if (count($matches) > 0) { 
    echo substr($url, 0, strpos($url,$matches[0])+1); 
} else { 
    echo $url; 
} 
?> 
0

Использование sed:

sed 's#\(http://.*/\)[0-9]\+.*#\1#' 

, что означает:

  • захвата все символы, начиная с http:// до (не в том числе) первой встреченной цифре с предшествует косая черта: \(http://.*/\)[0-9]\+
  • продолжают соответствие любого символа до конца строки: .*$
  • заменить их с тем, что было ранее захваченные: \1

Я выбрал # как sed разделителя вместо классического /, потому что в противном случае вам придется избегать этих символов в вашем регулярном выражении.