[問題] 常規表示式的比對問題?

看板Perl作者 (開心)時間18年前 (2007/04/07 19:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
若我有三種可能分別是  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)
文章代碼(AID): #165uIcM2 (Perl)
文章代碼(AID): #165uIcM2 (Perl)