这个有什么问题?
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
答案 0 :(得分:1)
[^s]+
匹配所有不是文字's'的字符,所以你得到的最好的是-logging.jar
答案 1 :(得分:1)
第一个说“非贪婪地抓住所有东西,直到第一个字符不是”s“并将其放入$ 1(因此$ 1 =常见)并且将那个以”.jar“结尾的所有内容放入$ 2(因此$ 2 =“-logging.jar”)。
第二种形式说“捕获所有与至少一个或多个不是”s“的字符一起盯着的东西(在捕获开始于”c“之前),然后是以”.jar“结尾的东西(因此你得到) $ 1中的整个“commons-logging.jar”
答案 2 :(得分:0)
你有一个正则表达式。 “任意数量的任何字符(非贪婪)后跟至少一个字符,后面跟着.jar”。
“后跟”很重要,比赛不能重叠。
尝试:
echo commons-logging.jar | perl -pe 's/(.*?)([^s]+\.jar)/$1 $1$2/'