在具有正则表达式的字符串中查找“赋值”(=)运算符

时间:2012-09-18 17:47:50

标签: regex perl

我知道那里有真正的REGEX大师,我觉得有一种模式会做我正在寻找的东西。

(注意:我正在使用perl,但如果你有另外一个喜欢的话可以从许多正则表达式模式中转换格式)

我正在寻找字符串(代码)中的赋值运算符。它没有世界上最强大的,但需要比“找到第一个=”更好。

这对于简单的测试来说很简单

var a = "42";

通过以上我可以说类似

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

我会得到我需要的价值。但是一旦它变得更加复杂,如:

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

事情变得复杂一些。如您所见,字符串中有一个“=”。我需要忽略字符串(最好是单引号和双引号)。

任何人都有一个很好的小技巧吗?是的,我有许多其他模式具有挑战性,但要解决这个模式将是一个巨大的飞跃。

我并不反对做一些事情,比如替换在封闭引号中找到的任何“=”,然后运行我的搜索运算符。不确定。

1 个答案:

答案 0 :(得分: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";'
        };