私はその地獄のために何かを掃除しようとしており、それについてもっと良い方法を模索しています。私のルールで文字列を解析するための正規表現を使うのではなく、ルート構文 "something /:searchitem/somethingelse"に近いものを使いたいと思っています。 "/ something/FOUNDIT/somethingelse "あなたは結果" FOUNDIT "を得るでしょう。ルビーの文字列からトークンをパースするための明確な方法
私がリファクタリングしている例は次のとおりです。 入力文字列を指定すると、「http://claimid.com/myusername」と表示されます。私は可能性のある一致の数に対してこの文字列を実行し、 "myusername"を返すことができます。それを実行するための
データは次のようになります。
PROVIDERS = [
"http://openid.aol.com/:username",
"http://:username.myopenid.com",
"http://claimid.com/:username",
"http://:username.livejournal.com"]
something_here("http://claimid.com/myusername") # => "myusername"
このリストにhttp://claimid.com/myusername
のような文字列をマッチングし、結果の意味を作る何かいい方法は?またはこれのような何かを簡単にするテクニックですか?私はこのようなことをしているので、配線コードを調べていましたが、これは一番簡単なコードではありません。
今私は正規表現でこれをやっているが、上記の方法は、文字列include?
またはindex
について
PROVIDERS = [
/http:\/\/openid.aol.com\/(\w+)/,
/http:\/\/(\w+).myopenid.com/,
/http:\/\/(\w+).livejournal.com/,
/http:\/\/flickr.com\/photos\/(\w+)/,
/http:\/\/technorati.com\/people\/technorati\/(\w+)/,
/http:\/\/(\w+).wordpress.com/,
/http:\/\/(\w+).blogspot.com/,
/http:\/\/(\w+).pip.verisignlabs.com/,
/http:\/\/(\w+).myvidoop.com/,
/http:\/\/(\w+).pip.verisignlabs.com/,
/http:\/\/claimid.com\/(\w+)/]
url = "http://claimid.com/myusername"
username = PROVIDERS.collect { |provider|
url[provider, 1]
}.compact.first
素晴らしいです。ロットの少ないコードで読みやすい。 – AdamFortuna