基本上我希望提取一个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)
非常感谢
答案 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
分隔符而非经典/
,因为否则您必须在正则表达式中转义这些字符。