If you don't have grep, you can use a tool on the web, such as this one hosted by the National Puzzlers' League. You'll be limited to word lists the web site has.
There are two different versions of grep syntax regarding certain special characters described in the Grouping Expressions and Other Repeat Indicators sections below.
In the so-called extended syntax, which is used by the NPL grep tool, the following special characters work as described in this document:
In basic syntax, which is used by the grep command, these are swapped. Parentheses, pipes, curly braces, question marks, and plus signs match those literal characters, and you must precede them with backslashes to match the literal characters. In this syntax, for instance, \(.\)\1 matches a double letter (any character appearing twice in a row; this syntax is described under Grouping Characters).
If the example above, l*ama, was the entire regular expression, it would also match words such as lamaze and camaraderie. ^l*ama would not match camaraderie and ^l*ama$ would match only ama, lama, llama, and lllama.
In our search engine, this is sometimes not necessary because you can specify the length of the words to search separately from the regular expression, but there are still many times (when searching on patterns of variable length, or for words of varying length, with some pattern that must appear at the beginning or end of the word) when these are useful.
Alternatively, you can use hyphens to indicate ranges such as [a-z] to match any letter. Place a hyphen first or last to include it among the set of characters which can be matched.
If the caret ^ appears as the first character inside the brackets, it inverts the match, so the bracketed expression will match any character except the ones inside the brackets. For instance, [^aeiouy] will match any character other than a vowel. [^A-Za-z] matches any non-letter.
One use for these is in combination with the * to indicate that an expression consisting of more than one character may be repeated any number of times. The expression ^(a.)*a$ will match words of odd length in which every other letter is a, such as aba, amana, and alabama.
A second use for these expressions is to describe alternatives larger than a single character, using the pipe character ( | ) between the alternatives. For instance, you could search for words in a piecemeal square with an expression like ^(ab|ar|co|gh|jo|pa|se|yn)*$ (filling in whatever parts you have available). If you're willing to type a bit more, you can use these expressions to match all possible letter groups that can get dropped out of an order takeout (the expression should contain all 25 alphabetic bigrams and all 24 trigrams).
A third use for these expressions is to repeat an unknown sequence multiple times. Backslash-numbers ( \1, \2, \3, etc.) match repetitions of expressions enclosed in ( ) earlier in the expression. The number indicates which parenthesized group (counting from the start of the regular expression) it must match. For instance, ^(..).*\1$ will match words that begin and end with the same bigram, such as church and escapes.
Note that these back-references have to match the same sequence of characters the original group matched, while repeat indicators, such as * used after an expression can match any sequence of characters which matches the expression repeatedly.
To indicate more precise repeat limits, you can use curly braces ( { and } ). {2,5} means that the preceding expression must appear at least twice but no more than 5 times. {,5} means at most 5 times, and {2,} means two or more times.
For instance, when searching only alphabetic characters, the phrase "beat around the bush" is turned into "beataroundthebush" and then would match a crossword pattern like "^b.a.a.....t..b..h$"
For instance, if you want to find words which repeat their initial bigram later in the word, but have no other repeated letters, you can search for ^(..).*\1 and then among these words, search for words which do not match ..(.).*\1 using the the initial two periods in the second expression to match the two characters, so the characetr enclosed by the parentheses matches the third or later character, and the back-reference matches that character again later in the word.
Regular expressions are not very good for doing transposals, but with two searches and some of the other options above, you can get a pretty close approximation to a transposal. To do this, in your first search, look for words that contain only the letters in your transposal. If you were looking for a transposal of "penetralia," search for ^[pentrali]*$. Then in the second search, search for words that have no repeated letters besides a and e by searching for words that do not match the regular expression ([^ae]).*\1 (the expression matches words with a repeated character other than a or e). Finally, combine this with the non-case-sensitive options on both searches, the option to search only alphabetic characters, and a word length of 10.
This isn't perfect, as it may find words which have more than two occurrences of a and/or e, and correspondingly fewer occurrences of the other of a and e, or none at all of some other letter. (On the ENABLE list, it finds planetaria, which has an extra a and no e. On other lists it finds a few other words but no exact transposals, besides, of course, penetralia itself.) Realistically, you are better off using an anagram tool, such as I, Rearrangement Servant, to perform this search, instead of a regular expression.