正则表达式提取部分网址
我今晚很懒,不想弄明白这个.我需要一个正则表达式来匹配以下输入中的’jeremy.miller’和’scottgu’:
http://codebetter.com/blogs/jeremy.miller/archive/2009/08/26/talking-about-storyteller-and-executable-requirements-on-elegant-code.aspx http://weblogs.asp.net/scottgu/archive/2009/08/25/clean-web-config-files-vs-2010-and-net-4-0-series.aspx 想法? 编辑 Chris Lutz在满足上述要求方面做得很好.如果这些是输入怎么办,那么你就不能在正则表达式中使用’archive’了? http://codebetter.com/blogs/jeremy.miller/ http://weblogs.asp.net/scottgu/ 解决方法
这会是你想要的吗?
'/([^/]+)/archive/' 在两种情况下,在“归档”之前捕获该块.根据正则表达式的风格,您需要逃避/ s才能使其正常工作.作为替代方案,如果您不想匹配存档部分,您可以使用前瞻,但我不喜欢前瞻,并且更容易匹配很多并且只捕获您需要的部分(在我看来),因此,如果您希望使用前瞻来验证下一部分是否存档,您可以自己编写一个. 编辑:当你更新你的问题时,我对你想要的东西的想法变得模糊不清.如果你想要一个新的正则表达式来匹配第二种情况,你可以使用与之前相同/的条件,在最后选择相应的部分: '/([^/]+)/$' 如果您特别需要文本jeremy.miller或scottgu,无论它们出现在URL中的哪个位置,而只是URL中的“单词”(即不是scottgu2),请再次使用/告诫尝试: '/(jeremy.miller|scottgu)/' 作为第三种选择,如果你想要域名之后的字段,除非该字段是“博客”,否则它会变得毛茸茸,尤其是/ caveat: 'http://[^/]+/(?:blogs/)?([^/]+)/' 这将匹配域名,可选的博客字段,然后匹配所需的字段. (?:)语法是一个非捕获组,这意味着它就像常规括号,但不会捕获值,因此捕获的唯一值是您想要的值. (?:)根据您的特定正则表达风味而有变化的风险.我不知道你要求的是什么语言,但我主要使用Perl,所以如果你使用PCRE,那么这个正则表达式应该很多.如果您使用不同的东西,请查看非捕获组. 哇.这是很多关于正则表达式的讨论.我需要闭嘴发帖. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |