今晚我很懒,不想弄清楚这个。我需要一个正则表达式来匹配来自以下输入的'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/
答案 0 :(得分:7)
这会是你想要的吗?
'/([^/]+)/archive/'
在两种情况下都会在“存档”之前捕捉作品。根据正则表达式的风格,您需要转义/
才能使其正常工作。作为替代方案,如果你不想匹配archive
部分,你可以使用前瞻,但我不喜欢前瞻,并且它更容易匹配很多,只是捕获你需要的部分(在我的意见),所以如果你想使用前瞻来验证下一部分是archive
,你可以自己写一个。
/
条件来摘下相应的部分:
'/([^/]+)/$'
如果您特别想要文字jeremy.miller
或scottgu
,无论它们出现在网址中的哪个位置,只能作为网址中的“字词”(即不是scottgu2
),试试这个,再次使用/
警告:
'/(jeremy\.miller|scottgu)/'
作为第三种选择,如果你想要之后的域名,除非那个字段是“博客”,它就会变得毛茸茸,特别是/
警告:
'http://[^/]+/(?:blogs/)?([^/]+)/'
这将匹配域名,可选的blogs
字段,然后匹配所需的字段。 (?:)
语法是非捕获组,这意味着它就像常规括号,但不会捕获值,因此捕获的唯一值是您想要的值。 (?:)
根据您的特定正则表达风格而有变化的风险。我不知道你要求的是什么语言,但我主要使用Perl,所以如果你使用PCRE,那么这个正则表达式应该很多。如果您使用不同的东西,请查看非捕获组。
哇。这是很多关于正则表达式的讨论。我需要闭嘴发帖。
答案 1 :(得分:5)
试试这个:
/\/([\w\.]+)\/archive/