我强烈与使用URI模块在这种情况下,建议同意,而我并不认为自己擅长正则表达。尽管如此,证明一种可能的方式来做你所要求的东西似乎是值得的。
test_url1 = 'https://www.example.com/some/page?user=1&[email protected]'
test_url2 = 'http://test.com/'
test_url3 = 'http://test.com'
regex = /^https?:\/\/[^\/]+(.*)/
regex.match(test_url1)[1]
# => "/some/page?user=1&[email protected]"
regex.match(test_url2)[1]
# => "/"
regex.match(test_url3)[1]
# => ""
注意,在后一种情况下,该URL没有尾随'/'
所以结果是空字符串。
正则表达式(/^https?:\/\/[^\/]+(.*)/
)表示的字符串(^
)http
(http
)开始,任选接着进行s
(s?
),接着随后在至少一个非斜杠字符([^\/]+
)://
(:\/\/
),之后是零个或多个字符,我们希望捕获这些字符((.*)
)。
我希望你能找到这样的例子和解释教育,我再次建议不要在这种情况下实际使用正则表达式。 URI模块使用起来更简单,而且更加健壮。
**正则表达式并不是一种魔术棒,它会在涉及到字符串的每一个问题上都发挥作用。**您可能想要使用已经编写,测试和调试的现有代码。 在PHP中,使用['parse_url'](http://php.net/manual/en/function.parse-url.php)函数。 Perl:['URI' module](http://search.cpan.org/dist/URI/)。 Ruby:['URI'' module](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI.html)。 .NET:['Uri'class](http://msdn.microsoft.com/en-us/library/txt7706a.aspx) –