我怎样才能使我的正则表达式工作?

时间:2014-10-23 17:17:19

标签: c# .net regex

我是.NET(C#)和正则表达式的新手。

我需要一个正则表达式来匹配网址:

  • 如果url字符串包含“/ id / Whatever_COMES_HERE_EVERY_CHAR_ACCEPTED /”:return true

  • 如果url字符串仅包含“/ id /”:return false

我尝试过以下操作,但只有当url为http:// localhost / id /

时才会返回true

这是我的剧本:

string thisUrl = HttpContext.Current.Request.Url.AbsolutePath;
Match match = Regex.Match(thisUrl, @"/id/*$");

我做错了什么?

3 个答案:

答案 0 :(得分:4)

你有这个:

/id/*$

这样做是匹配文字字符串/id/,然后你有量词*,这意味着0次或更多次。然后你有$,这意味着字符串结束。

您正在寻找文字/的重复,这不是您想要的。 (所以这个:http:// localhost/id///////////////////也应该与你原来的正则表达式相匹配)

你需要的是这样的东西:

/id/.+$

这将匹配文字/id/后跟.,其中正则表达式任何字符,使用+量化,这意味着 1或更多

你可以收紧它并使用\S代替.,这意味着非空白字符(因为网址不应该有空格)

另请注意:有各种在线正则表达式工具在尝试找出和测试正则表达式时非常有用。几个例子:

http://rubular.com/

http://regex101.com/

http://www.regxlib.com/

甚至可以使用Visual Studio的扩展程序:

https://visualstudiogallery.msdn.microsoft.com/bf883ae3-188b-43bc-bd29-6235c4195d1f

答案 1 :(得分:2)

当您使用start时,它表示前面的char中应存在0个或多个。你会想要使用 "/id/.+"表示至少还有一个字符必须在/

之后

答案 2 :(得分:1)

如果您只是寻找真/假解决方案,则应使用IsMatch()函数。另一个问题是*(零或更多)和+(一个或多个)是量词,必须在字符类或组之前。点(。)是表示任何字符的字符类。因此,问题的正确解决方案是:

Regex.IsMatch(thisUrl, @"/id/.+$");

考虑到输入是一个URL,可以通过将字符类限制为有效的URL字符来改进此正则表达式,但出于您的目的,上述内容应该足够了。