這個有什麼問題?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
這個有什麼問題?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
第一個說:「捕捉一切非貪婪,直到第一個字符那不是一個「s」,並把它變成$ 1(因此$ 1 =常見)和比匹配重圓在「的.jar」到$ 2(因此2 $ =‘-logging.jar’)。
後把一切第二種形式是「捕捉所有與至少一個或多個不是」s「的字符相關的東西(在捕獲開始在後面,在「的.jar」結尾的東西「C」)(因此你在$ 1全‘的commons-logging.jar’)
的[^s]+
比賽是不是字面的'所有字符,所以最好你將得到的是-logging.jar
哎呀錯過\,感謝 –
你有一個正則表達式。 「任何數量的任何字符(非貪婪),接着不是秒,然後的.jar至少一個字符」。
「其次」是重要的,匹配不能重疊。
嘗試:
echo commons-logging.jar | perl -pe 's/(.*?)([^s]+\.jar)/$1 $1$2/'
謝謝,看來我錯過了\ S之前 –