dylanthomasfan wrote:
> Hi All,
>
> I already know of a way to do the following, but I want to know the
> simplest way to do this in perl:
>
> I have an input string which is of the following form:
>
> ((a+b)*c)*(e+f*(g+h-i*(j+k)))+u
>
> I want to know how to split it easily so that I end up with an array
> @tokens, which has the following contents:
> ['(', '(', 'a', '+', 'b', ')', '*', 'c', ')', '*', '(', 'e', '+', 'f',
> '*', '(', 'g', '+', 'h', '-', 'i', '*', '(', 'j', '+', 'k', ')', ')',
> ')', '+', 'u']
>
> I tried the following:
>
> my @tokenSplit=split("[(\+),(\*),(\(),(\))]", $ARGV[0]);
>
> That didn't work.
>
> where each of the alphabetical letters above can be complex strings,
> but only [a-zA-Z0-9]*. For example, the following string is also
> acceptable input:
>
> ((numberOfApples*priceOfApples)+(numberOfOranges - (numberOfBananas -
> numberOfPlaintains)*17))
The program below seems to do what you require.
HTH,
Rob
use strict;
use warnings;
my $string = '((numberOfApples*priceOfApples)+(numberOfOranges -
(numberOfBananas - numberOfPlaintains)*17))';
my @tokens = $string =~ /\w+|\S/g;
print "$_\n" foreach @tokens;
**OUTPUT**
(
(
numberOfApples
*
priceOfApples
)
+
(
numberOfOranges
-
(
numberOfBananas
-
numberOfPlaintains
)
*
17
)
)
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/