我如何表示“在字符串中?

时间:2013-07-10 14:18:44

标签: regex perl

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

"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 Match代表第一个包含TL的示例,但如果我输入文字引号{{} 1}}在正则表达式中。

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

我错过了\"的工作方式吗?我希望第一个值=~匹配,并且程序打印出"1866TL",

有趣的是,如果我打印出Bad Match,请说明引号已被删除并按此方式搜索,我得到了我的期望。

$input_line

那么,发生了什么?引用是否被Perl剥离?我错过了别的什么吗?

3 个答案:

答案 0 :(得分:2)

  

那么,发生了什么?引用是否被Perl剥离?我错过了别的什么吗?

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

你的shell中发生了类似的事情。例如,在sh和衍生品中,foo "abc"将字符串abc传递给程序foo。如果您想通过"abc",则需要使用foo '"abc"'foo \"abc\"或类似内容。

答案 1 :(得分:1)

您编写的代码对我来说很合适。虽然实际上没有必要反斜杠引用。

答案 2 :(得分:0)

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

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

已在https://stackoverflow.com/a/17552454/1030675中提出建议。