我怎样才能使正则表达式工作
本文关键字:正则表达式 工作 | 更新日期: 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字符来改进此正则表达式,但就您的目的而言,以上内容应该足够了。