2014-11-08 123 views
0
my $formget='(90-?A(SB)?)'; 

if ($form_type=~/$formget/i) 

該正則表達式獲取90-A和90-ASB的文件,但它也獲得90-A/A和90-ASB/A。perl中的正則表達式獲取

但我想只有那些具有90-A和90-ASB而不是那些與90-A/A和90-ASB/A ..

我應該做怎樣的改變?

回答

1

正則表達式很好。使用錨限制在正則表達式匹配

^90-?A(SB)?$

變化在字符串的開始,在結束時提出

  • ^錨的正則表達式

  • $錨的正則表達式的字符串

這些錨點確保字符串總是以90開頭,並在遇到AASB時立即結束。

90-A/A因爲A之後,遇到/失敗其中作爲正則表達式期望一個$

90-ASB/A.因爲A之後,遇到S失敗其中作爲正則表達式期望一個$

+0

由於空指針,看來我沒有得到很好但:) – adrCoder 2014-11-08 14:09:26

+0

我只是接受了nu11 p01n73R – adrCoder 2014-11-08 14:24:40

1

如果你只匹配開頭90-表示我的代碼對你有用。如果你的文件數據像我一樣。這得到90-A90-ASB

@da=<DATA>; 
@ans=map{m/90-A$|90-ASB$/g} @da; 
print "@ans\n"; 

__DATA__ 
90-A/A 
90-ASB 
90-A 
90-ASB 
90-B 
+0

解釋更充分使用其他用戶的正則表達式。 :) – mkHun 2016-08-05 03:44:22