1

そこには本当の REGEX の達人がいることを知っています。

(注:私はperlを使用していますが、別のお気に入りがあれば、多くの正規表現パターンからフォーマットを変えることができます)

文字列(コード)で代入演算子を探しています。世界で最も堅牢である必要はありませんが、「最初の =".

これは単純なテストでは簡単です

var a = "42";

上記で、私は次のようなことを言うことができます

($before, $after) = m/([^=])\=(.*)/;

そして、必要な値を取得します。しかし、次のようにもう少し複雑になると:

myVar["this is my = key"] = "and this is my value";

事態はもう少し複雑になります。ご覧のとおり、文字列に「=」があります。文字列を無視する必要があります (一重引用符と二重引用符の両方が望ましい)。

誰もがこれのためのちょっとしたトリックを持っていますか? はい、他にもやりがいのあるパターンがたくさんありますが、これを解決することは大きな飛躍になるでしょう。

私は、引用符で囲まれた "=" を置き換えてから、演算子の検索を実行するようなことをすることに反対していません。わからない。

4

1 に答える 1

4

モジュールText::ParseWords(perl 5以降のコアモジュール)は、引用を処理できます。この例では、区切り文字で区切られた最初の2つの「フィールド」を使用し=ます。ご覧のとおり、これはかなり文字通りであり、空白、セミコロン、引用符もキャプチャします。あなたの例では、これは問題ではないと思いました。

use strict;
use warnings;
use Data::Dumper;
use Text::ParseWords;

while (<DATA>) {
    chomp;
    my ($key, $val) = quotewords('=', 1, $_);
    print Dumper { $key => $val }
}

__DATA__
var a = "42";
myVar["this is my = key"] = "and this is my value";

出力:

$VAR1 = {
          'var a ' => ' "42";'
        };
$VAR1 = {
          'myVar["this is my = key"] ' => ' "and this is my value";'
        };
于 2012-09-18T18:07:20.450 に答える