Cases do not return all expected result

I have the following line code:

Cases[g[h, r, t, b, m], x_[__, y_, __] -> y, {0, -1}]


I am expecting the results to be {r,t,b} because they match the pattern, but I am only getting {r}.

Can anyone suggest why I am getting only {r}?

-

If your aim is to remove the first and last argument:

Cases[g[h, r, t, b, m], _[_, y__, _] :> y, {0}]


Don't forget to localize y with :>

g[h, r, t, b, m][[2 ;; -2]] /. g -> List

List @@ (g[h, r, t, b, m][[2 ;; -2]])

Delete[List @@ fun, {{1}, {-1}}]

-
+1, but I don't think :> is necessary? –  mfvonh Jul 13 at 21:22
@mfvonh It is necessary. Without it, if y has a global value it will be used rather than the sequence matching the pattern y__. –  Mr.Wizard Jul 13 at 22:45
@Mr.Wizard Oh oops, duh. –  mfvonh Jul 13 at 22:47

Try using Longest:

Cases[g[h, r, t, b, m], x_[__, Longest@y__, __] -> y, {0}]


Your single underscore after y only matches 1 element.

-
ReplaceList[g[h, r, t, b, m], _[__, y_, __] :> y]
(*{r, t, b}*)

-