来自Url的正则表达式提取数字(端口号除外)

时间:2011-09-25 18:35:43

标签: c# regex

我必须从网址中提取产品的ID值。

这是SEO友好(网址路由)。

网址可以

http://www.example.com/{param0}/{param1}/123/{param2}/{paramN}

或者

http://localhost:6847/{param0}/{param1}/123/{param2}/{paramN}

对于第一个网址没有问题。 但是对于第二个我想要仅提取123或(ID)&lt ;-(这是一个整数)。

我知道如果我只想提取我可以使用的数字

[0-9]+

但我如何告诉regengine如何从url获取所有数字数据,除了可能有的数字

:

之前。 我用:

((!:)[0-9]+) 

不正确。 每个建议都很好::)

谢谢。

1 个答案:

答案 0 :(得分:1)

需要了解更多关于在示例中界定123的内容的信息。

从表面上看,(?<!:)[0-9]+会发现第一个数字之前没有':'

修改可能为了更准确,这个(?<!:\d+)[0-9]+会更好 请注意,如果.NET允许可变长度的后视(我认为它确实如此)。

对于固定长度的后视(PCRE),这样的事情可能有效:(?<![:\d])[0-9]+

Edit2

@ Sanosay-在考虑.NET类型的外观之后,上面的正则表达式需要稍微改变一下。 它应该是(?<!:\d*)[0-9]+。那是因为在' 1234'中,1将满足断言。

希望你认为这是事实。我为两个正则表达式做了一个测试用例 @"(?<!:\d*)[0-9]+"
@"(?<![:\d])[0-9]+"
满足条件。

ideone C#代码的链接在这里:http://ideone.com/tLn2j