找回密码
 FreeOZ用户注册
查看: 2794|回复: 27
打印 上一主题 下一主题

[学习深造] regular expression

[复制链接]
跳转到指定楼层
1#
发表于 4-12-2014 18:51:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
What regular expression will match this url?

http://www.podtrac.com/pts/redirect.mp3/download.publicradio.org/podcast/marketplace/pm/2014/12/03/pm_20141203_pod_64.mp3

I tried this "http://[0-9a-zA-Z_/]*.mp3" and does not work.
回复  

使用道具 举报

2#
发表于 4-12-2014 22:08:50 | 只看该作者
本帖最后由 finger|regnif 于 4-12-2014 20:10 编辑

  • [0-9a-zA-Z_/] 没有包括 wwwDOTpodtracDOTcom 中的 DOT 呢!

  • .mp3 中的 dot 应该要转义吧.

  • 以mp3结尾的话应该要加上 $.



试试 http://[0-9a-zA-Z_/\.]*\.mp3$
回复  

使用道具 举报

3#
 楼主| 发表于 5-12-2014 05:15:24 | 只看该作者
finger|regnif 发表于 4-12-2014 23:08
  • [0-9a-zA-Z_/] 没有包括 wwwDOTpodtracDOTcom 中的 DOT 呢!
  • .mp3 中的 dot 应该要转义吧.

  • Thanks

    I write in golang and this seems working.

            var regularExpression = regexp.MustCompile("http://[0-9a-zA-Z_/.]*.mp3")
    回复  

    使用道具 举报

    4#
     楼主| 发表于 5-12-2014 07:33:06 | 只看该作者
    finger|regnif 发表于 4-12-2014 23:08
  • [0-9a-zA-Z_/] 没有包括 wwwDOTpodtracDOTcom 中的 DOT 呢!
  • .mp3 中的 dot 应该要转义吧.

  • 我也没搞懂为啥golang, vi中的.mp3 中的 dot 不要转义?
    回复  

    使用道具 举报

    5#
    发表于 5-12-2014 12:11:19 | 只看该作者
    DDD888 发表于 5-12-2014 08:33
    我也没搞懂为啥golang, vi中的.mp3 中的 dot 不要转义?

    . 不转义时, 可以匹配任何字符, 也就自然能匹配自身。 但也可也匹配
    :mp3  
    amp3
    xmp3
    等等。

    但, \.mp3, 就只能匹配 .mp3 了。
    回复  

    使用道具 举报

    6#
     楼主| 发表于 5-12-2014 12:17:20 | 只看该作者
    anull 发表于 5-12-2014 13:11
    . 不转义时, 可以匹配任何字符, 也就自然能匹配自身。 但也可也匹配
    :mp3  
    amp3

    但不知为啥加了\,在vi编辑器里被红色显示报错,在go run里显示编译错误
    回复  

    使用道具 举报

    7#
    发表于 5-12-2014 14:45:43 | 只看该作者
    DDD888 发表于 5-12-2014 13:17
    但不知为啥加了\,在vi编辑器里被红色显示报错,在go run里显示编译错误

    我用的 VIM 没有显示报错, \. 也可用。

    go 没用过, 不甚了解。
    回复  

    使用道具 举报

    8#
     楼主| 发表于 5-12-2014 15:22:00 | 只看该作者
    本帖最后由 DDD888 于 5-12-2014 18:55 编辑
    anull 发表于 5-12-2014 15:45
    我用的 VIM 没有显示报错, \. 也可用。

    go 没用过, 不甚了解。


    I found the answer.

    var regularExpression = regexp.MustCompile(`http://[\-/\.\w]*\.mp3`)

    Reference
    http://stackoverflow.com/questio ... equence-error-in-go
    回复  

    使用道具 举报

    9#
    发表于 6-12-2014 20:38:02 | 只看该作者
    回复  

    使用道具 举报

    10#
     楼主| 发表于 7-12-2014 05:10:54 | 只看该作者
    clarkli 发表于 6-12-2014 21:38
    楼主是只想匹配mp3文件吗?
    .mp4
    也会被部分Match哦。

    What is your answer?
    回复  

    使用道具 举报

    11#
    发表于 8-12-2014 09:33:17 | 只看该作者

    如果你只想完整匹配整个URL字符串,最好前面加上^ 后面加上$
    虽然不太确定,但是Golang应该也是用这两个字符来匹配字符串开始和结束位置吧
    回复  

    使用道具 举报

    12#
    发表于 8-12-2014 09:38:19 | 只看该作者
    wiserfirst 发表于 8-12-2014 10:33
    如果你只想完整匹配整个URL字符串,最好前面加上^ 后面加上$
    虽然不太确定,但是Golang应该也是用这两个 ...

    经测试果然如此,楼主可以在这里测试一下
    http://www.regexplanet.com/advanced/golang/index.html
    回复  

    使用道具 举报

    13#
     楼主| 发表于 8-12-2014 11:33:33 | 只看该作者
    wiserfirst 发表于 8-12-2014 10:33
    如果你只想完整匹配整个URL字符串,最好前面加上^ 后面加上$
    虽然不太确定,但是Golang应该也是用这两个 ...

    I tried $ several days ago and it did not catch any of mp3 url. I guess that url does not have line return in the html file. It might be ended with " for href html token
    回复  

    使用道具 举报

    14#
    发表于 8-12-2014 11:58:00 | 只看该作者
    本帖最后由 poplarbird_oz 于 8-12-2014 13:03 编辑

    ^http://[/\-\.a-zA-Z0-9]*?(?=\.(mp3))\.\2)$


    差不多这样,要用到Assertion , string replacement
    回复  

    使用道具 举报

    15#
    发表于 8-12-2014 14:37:48 | 只看该作者
    赞一下技术帖
    回复  

    使用道具 举报

    16#
     楼主| 发表于 9-12-2014 09:00:33 | 只看该作者
    poplarbird_oz 发表于 8-12-2014 12:58
    ^http://[/\-\.a-zA-Z0-9]*?(?=\.(mp3))\.\2)$

    I tried and it does not work. The error says something not supported related to perl?
    回复  

    使用道具 举报

    17#
    发表于 9-12-2014 09:11:29 | 只看该作者
    赞,以后我有类似的问题不用查技术网站了,直接freeoz上面问,哈哈
    回复  

    使用道具 举报

    18#
    发表于 10-12-2014 20:42:54 | 只看该作者
    DDD888 发表于 8-12-2014 12:33
    I tried $ several days ago and it did not catch any of mp3 url. I guess that url does not have lin ...

    以我目前理解,LZ想要的是在一个网页里面把所有的mp3 url 全都匹配出来是吗?
    如果不是这样请描述一下楼主要做的事情到底是什么
    回复  

    使用道具 举报

    19#
    发表于 10-12-2014 20:43:44 | 只看该作者
    poplarbird_oz 发表于 8-12-2014 12:58
    ^http://[/\-\.a-zA-Z0-9]*?(?=\.(mp3))\.\2)$

    楼主貌似是要做匹配 为啥要用到replacement呢?
    回复  

    使用道具 举报

    20#
    发表于 10-12-2014 20:51:15 | 只看该作者
    http://.*?\.mp3$

    不要问我素谁,请叫我雷锋
    回复  

    使用道具 举报

    21#
     楼主| 发表于 11-12-2014 11:53:37 | 只看该作者
    蒙面超人 发表于 10-12-2014 21:51
    http://.*?\.mp3$

    不要问我素谁,请叫我雷锋

    Does not work
    回复  

    使用道具 举报

    22#
     楼主| 发表于 11-12-2014 11:55:45 | 只看该作者
    wiserfirst 发表于 10-12-2014 21:42
    以我目前理解,LZ想要的是在一个网页里面把所有的mp3 url 全都匹配出来是吗?
    如果不是这样请描述一下楼 ...

    Yes, I just want to extract all mp3 file path from html file
    回复  

    使用道具 举报

    23#
    发表于 11-12-2014 13:08:14 | 只看该作者

    怎么会不work呢?你是什么语言?

    http://regexr.com/3a29t
    回复  

    使用道具 举报

    24#
     楼主| 发表于 11-12-2014 13:24:15 | 只看该作者
    本帖最后由 DDD888 于 11-12-2014 14:29 编辑
    蒙面超人 发表于 11-12-2014 14:08
    怎么会不work呢?你是什么语言?

    http://regexr.com/3a29t


    go

    I put the source code here

    http://freeoz.org/ibbs/forum.php ... 222&pid=5375993
    回复  

    使用道具 举报

    25#
    发表于 11-12-2014 14:00:34 | 只看该作者
    不知道lz需求是什么。
    贪婪匹配可以吗?

    http.*mp3
    回复  

    使用道具 举报

    26#
     楼主| 发表于 11-12-2014 18:54:34 | 只看该作者
    I think this will not allow invalid case

    var regularExpression = regexp.MustCompile(`href="(http://[/\w\-\.]*\.mp3)"`)
    回复  

    使用道具 举报

    27#
     楼主| 发表于 11-12-2014 18:55:01 | 只看该作者
    Mr.Q 发表于 11-12-2014 15:00
    不知道lz需求是什么。
    贪婪匹配可以吗?

    No
    回复  

    使用道具 举报

    28#
    发表于 11-12-2014 20:05:55 | 只看该作者
    DDD888 发表于 11-12-2014 12:55
    Yes, I just want to extract all mp3 file path from html file

    我大概明白了,相当于是从一个很长的字符串(即HTML文件)里面把若干个mp3文件的下载链接提取出来。如果是这样的确不能用^和$,因为匹配不发生在整个字符串的开始和结束处。
    要解决这个问题应该着眼在要匹配模式(即下载链接)的前后边界。下载链接应该是出现在形如<a href="http://example.com/file.mp3">的标签当中,那么用零宽断言分别匹配前面的href="和后面的",中间部分写个比较宽泛的表达式(比如http://[\-/\.\w]*\.mp3)应该就可以实现这个功能了
    回复  

    使用道具 举报

    您需要登录后才可以回帖 登录 | FreeOZ用户注册

    本版积分规则

    小黑屋|手机版|Archiver|FreeOZ论坛

    GMT+10, 22-8-2025 05:57 , Processed in 0.028303 second(s), 43 queries , Gzip On, Redis On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表