0
<> =~ m/([\+-][0-9]*)x|([\+-][0-9]*)y/;
print "$1, $2";

さまざまな入力の出力は次のとおりです。

3x+1y    ----->, +1
10x-2y   -----> ,  -2
-5x+2y   -----> -5, 
-10x+5y  -----> -10, 

基本的にランダムに動作し、x の係数を出力することもあれば、y の係数を出力することもあります。何がうまくいかないのですか?

4

3 に答える 3

5

パターンに代替があります: /(...)x|(...)y/. したがって、パターンは-2xまたはのようなものに一致します+5y

もう 1 つのエラーは、x 座標に符号 (+ または -) が必要なことです。おそらく、次のような正規表現が必要です。

/^\s* ([+-]?[0-9]+)x ([+-][0-9]+)y \s*$/x
于 2013-09-08T19:20:57.597 に答える
0
use strict;
use warnings;
my ($x, $y);

($x, $y) = <> =~ m/([+-]?[0-9]+(?=[xy]))/g; #assuming x is always the first term

print "$x, $y\n";

より複雑な表現には、これを使用することもできます。

use strict;
use warnings;

my (%number); #use a hash to store coeficcient and variables

my $expression = <>;

while ($expression =~ m/([+-]?[0-9]+)([a-z]+)/ig){
    $number{ $2 } += $1;
}

for my $variable (sort keys %number){
    print "$variable  has coeficcient $number{ $variable }\n";
于 2013-09-08T20:48:27.617 に答える