1

我有一个程序的示例输入。他们是

"1866TL","965937","

逗号是我要匹配的一部分。

如果输入中有字母字符,我想匹配。

我从@ARGV 得到论点。

$input_line = $ARGV[0];

if ($input_line =~ m/\A\"\d+\D+\d*\",/)
{
    print "Bad match\n";
}
else
{
    print "Good match\n";
}

如果我替换,.对于包含 的第一个示例\",我会得到我期望的结果,但如果我在正则表达式中加上文字引号,则不会。Bad MatchTL\"

如何将此输入正确表示为正则表达式?

我错过了如何=~工作?我期待第一个值"1866TL",匹配并且程序打印出来Bad Match

有趣的是,如果我打印出来$input_line,认为引号已被剥离并以这种方式搜索,我会得到我所期望的。

$input_line = $ARGV[0];

print $input_line."\n";


if ($input_line =~ m/\A\d+[^0-9]+\d*/)
{
    print "Bad match\n";
}
else
{
    print "Good match\n";
}

那么,发生了什么?Perl 是否去掉了引号?我还缺少其他东西吗?

4

3 回答 3

2

那么,发生了什么?Perl 是否去掉了引号?我还缺少其他东西吗?

在 Perl 中,字符串文字 "abc"(一段代码)产生字符串 abc(一个值)。如果要创建字符串"abc",则需要使用'"abc"',"\"abc\""或类似的。

您的外壳中正在发生类似的事情。例如, insh和导数,foo "abc"将字符串传递abc给 program foo。如果你想通过"abc",你需要使用foo '"abc"'orfoo \"abc\"或类似的。

于 2013-07-10T15:21:42.627 回答
1

你写的代码对我来说很好。虽然实际上没有必要反斜杠引号。

于 2013-07-10T14:22:50.700 回答
0

您的正则表达式的问题可能是\D匹配太多,即它也可以匹配双引号和逗号。为防止这种情况,请使用更具体的类:

m/\A"\d+[^0-9",]+\d*",/

正如https://stackoverflow.com/a/17552454/1030675中已经建议的那样。

于 2013-07-10T14:25:08.540 回答