3

次のような URI 文字列があります (etc任意の長さにすることができます)。

/7/ipsum/dolor/etc
/2/not/17/ipsum/etc

これが私が達成しようとしていることです: スラッシュで文字列を分割し、2 番目と 3 番目の一致 ( ["ipsum", "dolor"]and ["not", "17"]) を取得し、2 番目の要素が数値でない場合は破棄します。望ましい結果は["ipsum"]["not", "17"]です。

これを単純な Ruby で実装しました (文字列を配列に分割し、目的の値の値をチェックすることにより)。正規表現でこれを行うより良い方法はありますか?

4

2 に答える 2

3

拡張され、文書化された正規表現を使用した、可能な実装の 1 つを次に示します。

def extract_parts_from(path)
  pattern = %r{
    ^/[^/]+     # don't capture the first element
     /([^/]+)   # always capture the second element
     /(?:(\d+)/)?    # capture the third element if it's made up of digits
  }x
  path.match(pattern)[1,2].compact
end

テスト:

["/7/ipsum/dolor/etc", "/2/not/17/ipsum/etc"]. each do |p|
  p extract_parts_from(p)
end

結果:

["ipsum"]
["not", "17"]
于 2013-05-26T21:01:05.830 に答える