0

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

3 回答 3

1

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

如果您使用的是 PHP,则需要该parse_url功能。

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

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

于 2013-03-13T16:12:32.007 回答
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;
}
?>
于 2013-03-13T16:20:41.153 回答
0

使用sed

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

意思是 :

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

我选择#作为sed分隔符而不是经典的,/因为否则你将不得不在你的正则表达式中转义这些字符。

于 2013-03-13T16:21:32.650 回答