【问题标题】:Why does this URL-matching regex break at the equal sign?为什么这个 URL 匹配的正则表达式会在等号处中断?
【发布时间】:2012-08-28 07:14:57
【问题描述】:

我们应用程序中的一个模块会检查用户为 URL 编写的状态更新,以便从 embed.ly 获得预览。在共享以下链接之前,一切似乎都运行良好:

http://sic.sapo.pt/proj_queridajulia/Scripts/VideoPlayer.aspx?videoId={C1BB1496-A37B-44B7-825C-78A9A0A0B9AE}

我复制了我们的正则表达式(不是我写的)和链接到http://gskinner.com/RegExr/,显然正则表达式只匹配等号。正则表达式是:

(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))

谁能帮我指出错误所在,或者推荐另一个,最好是防弹的 URL 匹配正则表达式?

【问题讨论】:

  • 尝试转义等号?即将“=”更改为“\="
  • 好的,刚刚解决了。我刚刚在正则表达式中的所有括号组中添加了花括号,将其变成: (^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|文件|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(){},;/?:@&~=-])|%[A-Fa-f0- 9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!(){},;/?:@&~=%- ]))?([A-Za-z0-9$_+!*(){};/?:~-]))
  • 应该在发布问题之前尝试过。无论如何,感谢您的输入。
  • 有一个比这个怪物更简单的正则表达式... O_o;;
  • 既然您找到了自己问题的答案,而不是在评论中发布解决方案,您应该改为post the answer to your own question。然后其他人可以帮助您确定您的答案是否是最佳答案。

标签: regex


【解决方案1】:

好的,我只是尝试了一下并让它工作。我在似乎是允许的字符组中添加了花括号。最终的正则表达式变成了这样:

(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|w‌​ebcal):(([A -Za-z0-9$_.+!*(){},;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#( [a-zA-Z0-9][a-zA‌​-Z0-9$.+!(){},;/?:@&~=%-]))?([A-Za- z0-9$+!*(){};/?:~-]))

我仍然不知道正则表达式的哪个部分负责什么。 :/ 因此,如果有人愿意指出,我将不胜感激。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多