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 以来的核心模块)可以为您处理引用。此示例将采用由分隔符分隔的前两个“字段” =。如您所见,它是相当字面的,甚至可以捕获空格、分号和引号。我通过您的示例假设这不是问题。

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 回答