Hi, Eric -
Your suggestion seems to work. Here is how I am using it:
In: z = Alternatives @@ Characters["wdleano"]
Out: "w" | "d" | "l" | "e" | "a" | "n" | "o"
In: Select [Select[Select[WordList[], StringMatchQ[#, z ..] &], StringMatchQ[#, ___ ~~ "w" ~~ ___] &], StringLength[#] > 3 &]
Out: {"allow", "anew", "awed", "dawdle", "dawn", "deadwood", "dowel", \ "down", "download", "dwell", "endow", "endowed", "lawn", "lowland", \ "newel", "owned", "waddle", "wade", "wale", "wall", "wallow", "wand", \ "wane", "weal", "wean", "weaned", "wedded", "weed", "weld", "well", \ "wend", "woad", "wold", "wood", "wooded", "wooden", "woodland", \ "wool", "woolen"}
I constructed the second StringMatch selector manually, but I think it's a small step to automate that.
Thanks. ...RM