提取部分URL

时间:2013-03-13 16:10:24

标签: regex

基本上我希望提取一个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/

其他信息 - 与此问题类似的与语言无关的正则表达式 Getting parts of a URL (Regex)

非常感谢

4 个答案:

答案 0 :(得分:1)

这可能不是正则表达式的工作,而是适用于您选择的语言的现有工具。您使用的是哪种语言?您可能不想使用正则表达式,而是使用已经编写,测试和调试的现有模块。

如果您使用的是PHP,则需要parse_url函数。

如果您使用的是Perl,则需要URI模块。

如果您使用的是Ruby,请使用URI模块。

答案 1 :(得分:0)

每次URL的结构是否相同?也就是说,你可以在S个正斜线后切断URL吗?如果没有,为什么不呢?

答案 2 :(得分: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;
}
?>

答案 3 :(得分:0)

使用sed

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

表示:

  • 捕获以http://开头的任何字符,直至(不包括)第一个遇到的数字,前面有斜线:\(http://.*/\)[0-9]\+
  • 继续匹配任何字符到行尾:.*$
  • 将这些替换为之前捕获的内容:\1

我选择#作为sed分隔符而非经典/,因为否则您必须在正则表达式中转义这些字符。