我有一个程序的示例输入。他们是
"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剥离?我错过了别的什么吗?
答案 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*",/