0

The title refers to the general problem of writing patterns to match pattern-containing expressions (hence "meta-match").

Here's an example.

In the following rules

```
0 -> "A"
foo[1] -> bar[2]
{1, 10} -> 11
```

the left-hand-sides contain no patterns, at least explicitly. I'll refer to such rules as being "pattern-free".

Now, given a list of rules (`rules`

), how can one obtain the sublist consisting only of the pattern-free ones?

This naive solution won't work:

```
Cases[rules,x_ /; FreeQ[x, (Blank[___] | BlankSequence[___] | BlankNullSequence[___])]]
```

I can solve this problem at least with the following hack

```
Cases[(rules /. (Blank | BlankSequence | BlankNullSequence) -> $patt),
y_ /; FreeQ[y, $patt[___]]]
```

or

```
Cases[(rules /. x:(Blank | BlankSequence | BlankNullSequence) -> $patt[x]),
y_ /; FreeQ[y, $patt[_][___]]
] /. $patt[z_] -> z
```

...but I figure that *Mathematica* may provide standard constructs to deal with such situations. If so, I'd like to learn what they are.

5

`Verbatim`

and`PatternHold`

are useful. – Szabolcs – 2015-01-16T15:07:14.2802What @Szabolcs said. Except the second one should be

`HoldPattern`

. – Daniel Lichtblau – 2015-01-16T15:44:49.393Related: (2778), (17591), (17892), (38436), (43972)

– Mr.Wizard – 2015-01-16T18:36:24.677How would you owant to deal with expressions with things like

`x[Verbatim[2/;True]]`

or`x[HoldPattern[2]]`

? – Rojo – 2015-01-16T20:53:18.920