早教吧 育儿知识 作业答案 考试题库 百科 知识分享

Perl匹配下面一个语句出错:$line文件如下ChassisG1234TC80-12M$linem/^Chassis\s+(\w{5,12})\s+(\w{2,9})\s+/;$a=$1;$b=$2;print$a"\n";print$b"\n";#这个值一直为空,由于TC80-12M中有一个“-”,导致匹配失败,如何

题目详情
Perl匹配下面一个语句出错:
$line 文件如下
Chassis G1234 TC80-12M
$line m/^Chassis\s+(\w{5,12})\s+(\w{2,9})\s+/ ;
$a=$1; $b=$2;
print $a"\n";
print $b"\n"; # 这个值一直为空,由于TC80-12M 中有一个“-”,导致匹配失败,如何改表达式使之能正确匹配到“TC80-12M”?
如果$line 的内容为下面的其中一行,第二行这次不是“-”,而是一个空格,怎么样用一个通用的表达式把“TC80-12M”和“TC80 12M”匹配出来.
Chassis G1234 TC80-12M
Chassis G1234 TC80 12M
Jul 6,2011
由于初学,输入太少,只能写出下面的匹配语句,可以勉强完成"TC80-12M"&"TC80 12M"&"TC8012M",
$line m/^Chassis\s+(\w{5,12})\s+(\w{4,15})(\-|\s+)(\w+)/ ; # 如后面加g,匹配不完整,会漏掉空格和“-”后面部分.
$a=$1; $b=$2;$c=$3;
if ($3)
{
$line m/^Chassis\s+(\w{5,12})\s+(\w+(\-|?:\s+)\w+)/g ;
$a=$1; $b=$2;
}else{
$line m/^Chassis\s+(\w{5,12})\s+(\w{4,15})/ ;
}
print $a"\n ";
print $b"\n";
▼优质解答
答案和解析
模糊的,需要“TC80-12M”和“TC80 12M”最后一列出现.
m/Chassis\s+(\w+)\s+(.+)/g;
准确点的,使用或运算符(|),
m/Chassis\s+(\w+)\s+(\w+(?:\s|\-)\w+)/g;