2

/正規表現を使用して、URLの最初のパスの前にあるものをすべて削除するにはどうすればよいですか?

URL の例:https://www.example.com/some/page?user=1&email=joe@schmoe.org

それから、私はただ欲しい/some/page?user=1&email=joe@schmoe.org

単なるルート ドメイン (つまり ) の場合は、 が返されるようにするhttps://www.example.com/だけです。/

ドメインにはサブドメインがある場合とない場合があり、安全なプロトコルがある場合とない場合があります。本当に最終的には、最初のパス スラッシュの前に何かを取り除きたいだけです。

念のため、Ruby 1.9.3 を実行しています。

4

4 に答える 4

13

これには正規表現を使用しないでください。URIクラスを使用します。あなたは書ける:

require 'uri'

u = URI.parse('https://www.example.com/some/page?user=1&email=joe@schmoe.org')
u.path #=> "/some/page"
u.query #=> "user=1&email=joe@schmoe.org"

# All together - this will only return path if query is empty (no ?)
u.request_uri #=> "/some/page?user=1&email=joe@schmoe.org"
于 2013-07-18T21:29:46.540 に答える
5
 require 'uri'

 uri = URI.parse("https://www.example.com/some/page?user=1&email=joe@schmoe.org")

 > uri.path + '?' + uri.query
  => "/some/page?user=1&email=joe@schmoe.org" 

Gavin も述べたように、魅力的ではありますが、これに RegExp を使用することはお勧めできません。RegExp を作成したときには予期していなかった特殊文字 (UniCode 文字も含む) を含む URL を使用できます。これは、特にクエリ文字列で発生する可能性があります。URI ライブラリを使用する方が安全な方法です。

于 2013-07-18T21:32:48.093 に答える
0

を使用して同じことができますString#index

index(部分文字列[, オフセット])

str = "https://www.example.com/some/page?user=1&email=joe@schmoe.org"
offset = str.index("//") # => 6
str[str.index('/',offset + 2)..-1]
# => "/some/page?user=1&email=joe@schmoe.org"
于 2013-07-18T22:04:18.750 に答える
0

この場合は URI モジュールを使用するというアドバイスに強く同意します。また、正規表現が得意だとは思いません。それでも、あなたが求めていることを実行する 1 つの可能な方法を示すことは価値があるようです。

test_url1 = 'https://www.example.com/some/page?user=1&email=joe@schmoe.org'
test_url2 = 'http://test.com/'
test_url3 = 'http://test.com'

regex = /^https?:\/\/[^\/]+(.*)/

regex.match(test_url1)[1]
# => "/some/page?user=1&email=joe@schmoe.org"

regex.match(test_url2)[1]
# => "/"

regex.match(test_url3)[1]
# => ""

最後のケースでは、URL に末尾がない'/'ため、結果は空の文字列になることに注意してください。

正規表現 ( /^https?:\/\/[^\/]+(.*)/) は、文字列が ( ^) http( http) で始まり、オプションで( ) が続き、s( ) が続き、その後に少なくとも 1 つの非スラッシュ文字 ( ) が続き、その後に 0 個以上の文字が続き、それらをキャプチャしたいことを示します。文字 ( )。s?://:\/\/[^\/]+(.*)

この例と説明が参考になることを願っています。この場合、正規表現を実際に使用しないことを再度お勧めします。URI モジュールは使い方が簡単で、はるかに堅牢です。

于 2013-07-19T06:17:14.803 に答える