作者Yaowei (开心)
看板perl
标题[问题] 常规表示式的比对问题?
时间Sat Apr 7 19:46:43 2007
若我有三种可能分别是
1.
PTN ACT PTN 、
ACT PTN PTN 与
PTN PTN ACT
而我想将输入的句子丢入後判断它们到底属於哪一类?
p.s. 在各PTN ACT之间可能它们的前後有无字出现皆有可能
所以也是有可能会出现PTN 或 ACT的字
但我只想要取得最小的范围就好,当上述的其中一种情况成立的话
例子如下:
AA ACT with PTN CC PTN
==>属於第二类 ACT PTN PTN
------------------------------
that PTN ACT to of PTN at
==>属於第一类 PTN ACT PTN
------------------------------
PTN ACT that ACT to and ACT PTN
==>属於第一类 PTN ACT PTN
------------------------------
aaa ACT between PTN and PTN
==>属於第二类
------------------------------
abcd and cc PTN cc PTN aa ACT
==>属於第三类
只是我使用常规表示式若写成下列的话
则第二类会永远被比成第一类,根本不会比对到第二类去
while(<LINE>){
if(/(.*)?(PTN.*ACT.*PTN).*?/){
print "目前的情况是1:PTN ACT PTN\n";
print "1.抓到的\$&:",$&,$/;
print "-------------------------\n";
}elsif(/(.*)?ACT.*PTN.*PTN.*?/){
print "目前的情况是2:ACT PTN PTN\n";
print "2.抓到的\$&:",$&,$/;
print "-------------------------\n";
}else{
print "目前的情况是3:PTN PTN ACT\n";
print "3.抓到的\$&:",$&,$/;
print "-------------------------\n";
}
}
请问是否要改什麽地方会比较好呢^^?感谢
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.165.150
※ 编辑: Yaowei 来自: 140.116.165.150 (04/07 19:55)