【问题标题】:Regex for URL not workingURL 的正则表达式不起作用
【发布时间】:2017-05-09 20:22:38
【问题描述】:

我在 regexlib 上找到了这个正则表达式:

\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b

除非我的 URL 以符号结尾,否则它可以正常工作。

测试字符串:

http://localhost/MySite/Default.aspx?dl=TzV+1tS9W13zQX0NBLpQWS3gzszG5g59814C2PCXb0RqECKPsJ0n087YRaQ4w9iFIM86q8jBfQL3KoOkh79yUjSAV1XtJC4oL9sxeTmegFfD+TvbT/AZgCHpBgk1qOILqrILnpVKe/JWq0QISestnbOT/bq1KrTmHIlZVYuYC0jX2aCLYw2pOYV04Di43mMZNFwhL97m30XEBF2zFXTqyR8JYN0mOEdB4bpdN7SmTvwOzk6GE1paaKnGA0SEJA6+cm9azUrpl5/HIBmMt9I0CgRr+AlWZRlsZU1c+6ZUrX0rWWjUeeN5JHlNcHk0TGuMiuyEt5hmfAPXpxATe0fDXw==

正则表达式将捕获 URL,直到最后 2 个等号不会被包含在内。

我尝试了其他一些正则表达式模式都无济于事。而且我一直试图用这个来玩弄这个大约一个小时,但没有运气。我只是不太了解正则表达式!

建议?

【问题讨论】:

    标签: asp.net .net regex


    【解决方案1】:

    只需在末尾添加 [=]* 即可

    \b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b[=]*
    

    我猜该 url 包含 base 64 数据,可能以多个 = 结尾。所以添加 [=]* 告诉正则表达式期望 0 个或更多相等的符号。

    【讨论】:

    • 如何更改模式以在 URL 末尾包含任何符号(而不仅仅是等号)?
    • 我想我是根据你的回答@gaganshera 得到的。有没有比下面更有效的方法? \b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b([=,@,+,!,%,&,*,-])*
    • 您不应该添加逗号作为正则表达式的分隔符。你也应该转义 * 等字符。这样做:\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b([=@+!%&\*,-])*
    猜你喜欢
    • 2016-07-21
    • 2013-09-23
    • 2011-10-19
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多