2017-06-10 16 views
0

私はよく"category-"で始まると思われる属性を持っています。例えばRuby - 文字列をチェックしてサブストリングを取る

@category"category-"で始まり、それがない場合は、その後、(この例では、すなわち"ruby on rails""category-"後にのみ値を取得する場合

@category = "category-ruby-on-rails" 

どうすれば確認できますか?

+0

あなたはいつも 'some-words-separated-by-hyphen'ですか?これが 'category-'で始まっても問題ありませんか? –

答えて

3

正規表現を使用する2つの方法があります。 (一致しない場合の両方で、nilが返される。)

str = "category-ruby-on-rails" 

str[/(?<=\Acategory-).*/] 
    #=> "ruby-on-rails" 

str[/\Acategory-(.*)/, 1] 
    #=> "ruby-on-rails" 

(?<=\Acategory-)正後読みあります。つまり、"category-"は文字列(\A)の先頭で一致する必要がありますが、返される一致の一部ではありません。

(.*).*をキャプチャグループ1に保存します。インスタンスメソッドString#[]の2番目の引数は、その内容が取得され、メソッドによって返されるキャプチャグループです。

またString#gsubを使用することができます。

s = str.gsub(/\Acategory-/, '') 
    #=> "ruby-on-rails" 

しかし試合があったかどうかを確認する必要があります。たとえば、

s == str 
    #=> false (meaning the match was performed) 

正規表現を使用しないものも含めて、これを行うには他にも多くの方法があります。

s = "category-" 
str[s.size..-1] if str.start_with?(s) 
    #=> "ruby-on-rails" 

str = "division-ruby-on-rails" 
str[s.size..-1] if str.start_with?(s) 
    #=> nil 
+0

正規表現ですべてを解決できるようです。ニース! – Gerry

2

ので、あなただけの、あなたの文字列を分割その最初の要素を削除し、

result = false 
if @category.start_with?("category-") 
    result = @category.split("-").drop(1).join("-") 
end 

「1行」バージョンに参加した場合@categoryは「category-」で始まるかどうかをチェックすることができます:

result = @category.start_with?("category-") ? @category.split("-").drop(1).join("-") : false 
関連する問題