我強烈與使用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) –