2011-07-15 61 views
-1

這個有什麼問題?perl正則表達式的意外結果

echo commons-logging.jar | perl -pe 's/(.*?)([^s]+\.jar)/$1 $2/' 
commons -logging.jar 

我希望$ 2捕獲整個的commons-logging.jar? 特別是作爲

echo commons-logging.jar | perl -pe 's/([^s]+\.jar)/$1/' 
commons-logging.jar 

回答

1

第一個說:「捕捉一切非貪婪,直到第一個字符那不是一個「s」,並把它變成$ 1(因此$ 1 =常見)和比匹配重圓在「的.jar」到$ 2(因此2 $ =‘-logging.jar’)。

後把一切

第二種形式是「捕捉所有與至少一個或多個不是」s「的字符相關的東西(在捕獲開始在後面,在「的.jar」結尾的東西「C」)(因此你在$ 1全‘的commons-logging.jar’)

+0

謝謝,看來我錯過了\ S之前 –

1

[^s]+比賽是不是字面的'所有字符,所以最好你將得到的是-logging.jar

+0

哎呀錯過\,感謝 –

0

你有一個正則表達式。 「任何數量的任何字符(非貪婪),接着不是秒,然後的.jar至少一個字符」。

「其次」是重要的,匹配不能重疊。

嘗試:

echo commons-logging.jar | perl -pe 's/(.*?)([^s]+\.jar)/$1 $1$2/'