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

本文关键字:正则表达式 工作 | 更新日期: 2023-09-27 18:27:32

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

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

  • 如果url字符串包含"/id/Whatever_COMES_HERE_EVERY_CHAR_CCEPTED/":返回true

  • 如果url字符串仅包含"/id/":返回false

我尝试过以下操作,但只有当url为http://localhost/id/时,它才会返回true

这是我的脚本:

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

我做错了什么?

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

你有这个:

/id/*$

这样做的是匹配文字字符串/id/,然后得到表示0次或更多次的量词*。那么就有了$,这意味着字符串的末尾。

你在寻找文字/的重复,这不是你想要的。(因此:http:// localhost/id///////////////////也应该与原始正则表达式匹配)

你需要的是这样的东西:

/id/.+$

这将匹配文字/id/.,后者在正则表达式中表示任何字符,后者用+量化,后者表示1或更多

你可以收紧它,使用'S而不是.,这意味着非空白字符(因为URL不应该有空白)

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

http://rubular.com/

http://regex101.com/

http://www.regxlib.com/

甚至是你可以使用的视觉工作室的扩展:

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

当您使用start时,它表示将存在0个或多个前面的字符。您将希望使用"/id/.+"发出信号,表示/

之后必须再出现至少一个字符

如果您只是在寻找真/假解决方案,那么应该使用IsMatch()函数。另一个问题是,*(零或更多)和+(一个或更多)是量词,必须在前面加一个字符类或组。Dot(.)是一个表示ANY字符的字符类。因此,你的问题的正确解决方案是:

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

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