正则表达式提取所有内容,直到遇到斜杠后的数字

时间:2013-03-14 10:14:15

标签: regex

我希望从字符串中提取所有内容,但在斜线后遇到数字后忽略所有内容(允许使用字母数字)

示例:

http://www.test.com/products/cards/product_code100/12345/something_else
http://www.test.com/products/123abc/45678/

期望的输出 -

http://www.test.com/products/cards/product_code100/
http://www.test.com/products/123abc/

以下正则表达式为我提供了反向引用的所有内容,但如果我可以在斜杠后删除数字,那么它会很棒 -

   ^(.*:)//([a-z\-.]+)(:[0-9]+)?(.*)

其他信息 - 需要支持Languauge的正则表达式。

非常感谢

2 个答案:

答案 0 :(得分:1)

Perl中的示例:

echo "http://...." | perl -pe 's/(.*\/)\d+\/.*/$1/'

或:

echo "http://...." | perl -ne 'print "$1\n" if /(.*\/)\d+\/.*/'

编辑: @creinig在评论中指出的是 - 没有通用正则表达式这样的东西。尽管如此,Perl被广泛使用,因此它是一种选择。

答案 1 :(得分:1)

这应该适用于大多数语言,并且应该产生所需的输出

(http://.*)(?=/\d+(?!\w+))

它会占用每个字符,直到找到(lookahead)\后跟一个数字。

如果您尝试匹配

http://www.test.com/products/123abc/
or
http://www.test.com/products/123abc

它只是找不到匹配,你可以确定检查的字符串在斜杠后没有遇到纯数字