2012-12-13 47 views
1

的這是我的正則表達式:Perl的正則表達式的麻煩與一個或多個任何字符

^.+\/.+\.sql.+$ 

它匹配

/somedir/abc.sql.20121212 

,但它不匹配

/somedir/abc.sql20121212 
/somedir/abc.sql_20121212 

我是什麼做錯了? sql.+$是不是意味着匹配'sql'並且至少有一個後面的任何字符?

UPDATE:上述正則表達式確實有效。我得到了意想不到的結果,因爲我沒有保存存儲正則表達式的配置文件(DUH !!)以前的值是^.+\/.+\.sql\..+$,這意味着必須是'sql'。並且至少有一個後面的任何字符。抱歉虛驚一場。

+0

請張貼實際可運行的代碼的輕鬆重現測試用例。 – 2012-12-13 00:17:24

+2

你的正則表達式好像在工作 – perreal

+0

是的,它們*應該*全部匹配。我剩下的預感是一個不太完整的文件。 – 2012-12-13 00:22:35

回答

2

其實,它們匹配:

print "$_: ", /^.+\/.+\.sql.+$/ ? 'match' : 'no match', "\n" 
    for qw(
     /somedir/abc.sql.20121212 
     /somedir/abc.sql20121212 
     /somedir/abc.sql_20121212 
    ); 

輸出

/somedir/abc.sql.20121212: match 
/somedir/abc.sql20121212: match 
/somedir/abc.sql_20121212: match 
+0

你是對的。看到我的更新... – amphibient