in reply to regular expression math equations

Not quite \w?+ (which could be \w+ just as easily), as that gives you digits as well, which it sounds like you don't want.  Instead, use [a-z]+, which matches against variable names (alpha only, in this case).  The /gi lets you match all occurrences (g = global) without regard for case (i = ignore case).

If you have to match alphanumerics (eg. a7), then use something like ([a-z]\w*0) instead.

Of course, any problem requiring unique results just shouts out for a hash.

You could try something like this:

use strict; use warnings; + print "Enter expression: "; chomp(my $expr = <STDIN>); + my @vars = ($expr =~ /([a-z]+)/gi); my %unique = map { $_ => 1 } @vars; + printf "Unique variables: %s\n", join(',',keys %unique);

s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/

Replies are listed 'Best First'.
Re^2: regular expression math equations
by imp (Priest) on Nov 20, 2006 at 14:59 UTC
    Whether the [a-z]+ is appropriate depends on the context of the equation, and whether variables can have multiple characters. In a C program 'xy' is a variable named xy, but in a math equation it is likely to mean x times y.