2014-03-13 26 views
0

對於以下啓用了quotemeta的字符串,if語句無法匹配.cpp和.o文件名。我在這裏做錯了什麼?使用quotemeta的字符串無法匹配特定的正則表達式

E\:\\P4\\NTG5\\PATHOLOGY_products\\arm\-qnx\-m650\-4\.4\.2\-osz\-trc\-dbg\\gen\\deliveries\\ntg5\\arm\\api\\sys\\most\\pf\\mss\\src\\private\\DSIDSYSMOSTServerMoCCAStream\.cpp\ 

`E\:\\P4\\NTG5\\PATHOLOGY_products\\arm\-qnx\-m650\-4\.4\.2\-osz\-trc\-dbg\\bin\\deliveries\\ntg5\\arm\\api\\sys\\most\\pf\\mss\\src\\DSIDSYSMOSTServerMoCCAStream\.o\` 

 if ($a_path =~ m/[\\>](\w+\.(?:cpp|c))/) { 
      $compile_line_array->source_filename($a_path); 
      $compile_line_array->include_list_index($include_path_cnt); 
      $j=0; 
      last; 
     } 

     if($a_path =~ m/[\\>](\w+\.(?:o))/) { 
      $compile_line_array->object_file($a_path); 
     } 
+0

這裏\ w +不能匹配,但是m/\。(?: cpp | c)$ /匹配。但是爲什麼\ w +在這裏無法匹配。 – user3392184

回答

0

爲什麼你有你的文件名通過quotemeta運行?正如你已經證明的那樣,這將會反斜槓逃離你的所有。因此,如果這是你想要匹配的,你將不得不添加一些反斜槓到你的正則表達式。

if ($a_path =~ m/[\\>](\w+\\\.(?:cpp|c))/) { 

if($a_path =~ m/[\\>](\\\w+\.(?:o))/) { 
+0

我需要匹配基於窗口的路徑和反斜槓,與out quotemeta,我得到以下錯誤 - 通過main-e或e.pl在unicode/Is/e.pl行0找不到Unicode字符屬性定義 - 因此我使用了quotemeta。 – user3392184

+0

我打算使用$ a_path =〜s!\\!/!g;消除所有的困惑。 – user3392184

+1

你收到什麼錯誤?所以你使用了quotemeta,因爲你試圖避免你程序中的其他缺陷?我想我們在這裏面對一個['XY問題'](http://www.perlmonks.org/?node_id=542341)。爲什麼不解釋你想要做什麼之前,你開始變得幻想和你遇到什麼問題。您可以編輯您的原始問題線程。 – Miller

2

的正則表達式匹配的單詞字符後跟一個.;如果您的字符串在每個.之前都有反斜槓,則它們將不匹配。

不知何故,你沒有正確地思考這個問題:「quotemeta」不是被啓用或禁用的東西,它是一個操作符,它在你的字符串中的某些字符前面加上反斜槓。你爲什麼首先使用它?

+0

看起來像OP假設'quotemeta'應該應用在字符串而不是正則表達式 – Zaid

相關問題