私はよく"category-"
で始まると思われる属性を持っています。例えばRuby - 文字列をチェックしてサブストリングを取る
:@category
は"category-"
で始まり、それがない場合は、その後、(この例では、すなわち"ruby on rails"
)"category-"
後にのみ値を取得する場合
@category = "category-ruby-on-rails"
どうすれば確認できますか?
私はよく"category-"
で始まると思われる属性を持っています。例えばRuby - 文字列をチェックしてサブストリングを取る
:@category
は"category-"
で始まり、それがない場合は、その後、(この例では、すなわち"ruby on rails"
)"category-"
後にのみ値を取得する場合
@category = "category-ruby-on-rails"
どうすれば確認できますか?
正規表現を使用する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
正規表現ですべてを解決できるようです。ニース! – Gerry
ので、あなただけの、あなたの文字列を分割その最初の要素を削除し、
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
あなたはいつも 'some-words-separated-by-hyphen'ですか?これが 'category-'で始まっても問題ありませんか? –