【问题标题】:RegularExpression is not working as expected c#正则表达式没有按预期工作c#
【发布时间】:2018-06-04 20:37:43
【问题描述】:

我想在Regular Expression 的帮助下实现以下结果 -

http://articles-test.mer.com --> should not match/accept or return false

http://articles-test.mer.com/ --> should not match/accept or return false

http://articles-test. mer.com/ --> should not match/accept or return false

http://articles-test. mer.com/sites --> should not match/accept or return false

http://articles-test.mer.com/sites --> should match/accept or return true

http://foodfacts.merc.com/green-tea.html --> should match/accept or return true  

http://articles-test.merc.com/sites/abc.aspx --> should match/accept or return true  

结论-简而言之,如果URL只有domain,应该是not match/accept

我已尝试使用以下expression,但它没有按预期工作 -

^http(s)?://([\w-]+.)+[\w-]+(/[\w-./?])?$

请提前建议和感谢!

【问题讨论】:

  • 你需要转义点:\w-]+\..
  • @HimBromBeere 您能否突出显示要添加或排除表达式的哪一部分?
  • 您已经说了很多关于您不想想要匹配的内容,但没有明确说明您想要想要匹配的内容。您确定 Regex 是适合这里工作的工具吗?看起来您正在尝试使用某些表单或 URI - 您可以不 TryCreate 和 Uri 并检查其各种属性吗?
  • @Damien_The_Unbeliever 已经得到答案,谢谢!
  • 这并不意味着如果您的问题可以变得更好,您不应该打扰。无论从任何答案中,您的问题都应该始终清晰易懂。但是,与我们每天在这里阅读的其他内容相比,您的问题非常好。

标签: c# regex visual-studio


【解决方案1】:

您只需要转义点,因为它通常表示任何单个字符。这同样适用于斜线。所以你的正则表达式变成了这样:

^http(?:s)?:\/\/(?:[\w-]+\.?)+\/[\w-\.]+(\/[\w-])?$

所以\/\/ 字面上匹配//,而\. 匹配点。

我还添加了一些非捕获组 (?:)。如果您想要获取各个部分,只需省略这两个字符即可。

查看regex101

编辑:我在/ 后面的部分添加了\.,这样您还可以匹配文件而不是URL 中的目录。

EDIT2:您绝对应该考虑使用Uri.TryCreate 检查给定的字符串是否是有效的URL,如this post 所示,而不是使用难以理解的正则表达式重新发明轮子。

Uri uriResult;
bool result = Uri.TryCreate(myString, UriKind.Absolute, out uriResult) 
    && uriResult.Scheme == Uri.UriSchemeHttp;

【讨论】:

  • 但是当我输入这个 URL http://foodfacts.mercola.com/green-tea.html 它不匹配,事实上这应该是有效的
  • 找不到与此 URL 匹配的 -http://articles-test.merc.com/sites/abc.aspx 并且应该返回 true,也更新了问题
  • @PPB 您能否停下来为您的问题永久添加新条件?这使得它不可能真正回答它。 http://articles-test.merc.com/sites/subsite/abc.aspx 呢?或动态内容:http://articles-test.merc.com/sites/abc.aspx?myparam=1?您会看到它变得越来越复杂,具体取决于您的 URL 中有多少分词。
【解决方案2】:

你可以使用这个正则表达式:

^http(s)?://[^/\s]+/.+$

【讨论】:

  • 这也将匹配"http://my weird string containing spaces/kakakakaka"这绝对不是有效的URL。
  • @HimBromBeere - 但这不是我认为的要求。
  • @karthikselvaraj 已更新!
  • OP 谈到了 URL,所以我认为它是的要求。
  • @karthikselvaraj 您能否在 URL 中包含不接受空格的表达式,否则一切都很完美。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多