小vim正则表达式
问题描述:
我有一堆字符串,看起来像这样:'../DisplayPhotod6f6.jpg?t=before&tn=1&id=130'
,我想拿出问号后的所有东西,看起来像'../DisplayPhotod6f6.jpg'
。小vim正则表达式
s/\(.\.\.\/DisplayPhoto.\{4,}\.jpg\)*'/\1'/g
这个正则表达式捕获一些但不是全部的出现,你能明白为什么吗?
答
下面的正则表达式:/(\.\./DisplayPhoto.*\.jpg)/gi
对下面的例子测试:
../DisplayPhotocef3.jpg?t=before&tn=1&id=54
../DisplayPhotod6f6.jpg?t=before&tn=1&id=130
将导致:
../DisplayPhotocef3.jpg
../DisplayPhotod6f6.jpg
+0
这是PCRE,它不同于Vim的正则表达式。 – jamessan 2010-07-29 03:32:54
答
我觉得去这个easyest方法是:
s/?.*$/'/g
这就是说:删除问号后面的所有内容,并用单引号替换它。
答
%s/\('\.\.\/DisplayPhoto\w\{4,}\.jpg\).*'/\1'/g
一些注意事项:
- %将导致掉在所有行工作。
- \ w而不是'。',以防万一有一些格式不正确的文件名。
- 替换'。'在匹配正则表达式开始时,'正是它应该匹配的东西。
你能给一个错过的例子吗? – 2010-07-28 19:02:40
Amardeep,它错过了''../DisplayPhotocef3.jpg?t=before & tn = 1 & id = 54'',''../DisplayPhotod6f6.jpg?t=before & tn = 1 & id = 130'' , 还有很多。 – nnyby 2010-07-28 19:11:42
第一个“。”的用途是什么?在组的开始?它可以替换为“'”(单引号)吗? – matias 2010-07-28 20:21:29