分页: 1 / 1

一个头痛的正则问题

发表于 : 2010-11-12 9:56
gzbao9999
路径如下
/home/some.site.com/savepath/xxx.tar.gz
xxx.tar.gz之前的路径的层数不固定,xxx这个名字和后缀名不顾定,路径名称也不固定

需要一个正则,匹配出最后一个/后面的第一个.
要求:只能用正则 (Perl正则 扩展正则都可以)
也许有点难,反正我是撞墙了,感觉捉襟见肘了。

btw:可以用echo /home/some.site.com/savepath/xxx.tar.gz|grep -P 'yourregex' 检测结果是不是正确
也许正则不能搞定它,总之各位试试

Re: 一个头痛的正则问题

发表于 : 2010-11-12 11:54
xiangxw
递归打开目录查找

Re: 一个头痛的正则问题

发表于 : 2010-11-12 13:06
BigSnake.NET
^.*/[^/.]*\.[^/]*$

Re: 一个头痛的正则问题

发表于 : 2010-11-12 13:44
gzbao9999
晕 楼上2个一看就没搞明白情况, :em25 难道是哥表达的不清楚

那个路径就是一字符串,只匹配到那个.就可以了
-----------------------------------------------------------------------------------------
可惜正则的分组,没有忽略的行为 like锚位那样,该死的是锚位里又必须是具体的字符串

Re: 一个头痛的正则问题

发表于 : 2010-11-12 13:52
BigSnake.NET
我忘记零宽度匹配怎么写了, 你改一下就是了嘛。。。

Re: 一个头痛的正则问题

发表于 : 2010-11-12 15:54
gzbao9999
BigSnake.NET 写了:我忘记零宽度匹配怎么写了, 你改一下就是了嘛。。。
没那么简单,我只是发现正则不是万能了。有点纠结,看有没有超级牛力诞生。

Re: 一个头痛的正则问题

发表于 : 2010-11-13 7:27
aerofox

代码: 全选

echo /home/some.site.com/savepath/xxx.tar.gz|grep -o -P 'y/\K[^.]*\.'
看帮助写的,没有测试,因为我的系统中的 grep 没有编译 -P 参数。

Re: 一个头痛的正则问题

发表于 : 2010-11-13 7:30
aerofox
上面那个忘了考虑必须是最后一个 /,还要改一改,现在没空研究。
在 vim 中是可以用

代码: 全选

/\/\zs[^\/.]*\.\(.*\/\)\@!
搜索到你要内容的。

Re: 一个头痛的正则问题

发表于 : 2010-11-13 11:35
fanhe
正则我非常之恼火
各个软件之间,各个平台之间的正则都有区别
我都不知道什么时候用哪个语法的正则!

Re: 一个头痛的正则问题

发表于 : 2010-11-13 21:36
aerofox
用 grep 的:

代码: 全选

echo '/home/some.site.com/savepath/xxx.tar.gz' | grep -o -P '.*/\K[^./]*\.(?!.*/)'

Re: 一个头痛的正则问题

发表于 : 2010-11-13 23:21
IDRI
用awk 很简单但是不知合不和楼主的意思
awk -F'/' '{print $NF }' | awk -F'.' '{print $1}'

Re: 一个头痛的正则问题

发表于 : 2010-11-14 21:12
tusooa

代码: 全选

tlcr: 0 庚寅年十月九日 21:07 ~ 
● perl -pe 's@^.+/(.+?\.).+$@\1@' <<< '/xxx/yyy/zzz/haha.xxx'
haha.
tlcr: 0 庚寅年十月九日 21:07 ~ 
● 
不会用grep -P额。。。

Re: 一个头痛的正则问题

发表于 : 2010-11-15 10:43
gzbao9999
aerofox 写了:用 grep 的:

代码: 全选

echo '/home/some.site.com/savepath/xxx.tar.gz' | grep -o -P '.*/\K[^./]*\.(?!.*/)'
这个最后的结果是xxx. (可是我要的只是那个.)
tusooa 写了:

代码: 全选

tlcr: 0 庚寅年十月九日 21:07 ~ 
● perl -pe 's@^.+/(.+?\.).+$@\1@' <<< '/xxx/yyy/zzz/haha.xxx'
haha.
tlcr: 0 庚寅年十月九日 21:07 ~ 
● 
不会用grep -P额。。。
这个的结果是haha. (和上面的效果一样的,只要那个.)

不过aerofox 的正则里 提供了我想要的关键\K (\K :忽略这个符号之前的正则匹配的所有内容,即便\K出现在分组里面,分组和分组之前的正则匹配到的部分也全部被忽略了)

我把实现写一下

代码: 全选

echo '/home/some.site.com/savepath/xxx.tar.gz'|grep -P '.*/[^.]*\K\.'    
用-P可以直观的看到匹配到哪个点,-Po就只显示点了

测试了一下其他语言 java 和 js中都不支持\K写法。 茶几阿!

Re: 一个头痛的正则问题

发表于 : 2010-11-16 12:36
thereisawill
gvim编辑器

/\\\@<=[^\\]*$