首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP中的正则表达式解析soundcloud“/set/”url

使用PHP中的正则表达式解析soundcloud“/set/”url
EN

Stack Overflow用户
提问于 2014-05-31 05:53:40
回答 1查看 679关注 0票数 1

我正在尝试执行一个正则表达式来将soundcloud解析为从链接中提取的嵌入代码

到目前为止,如果我先将这个url:https://soundcloud.com/theredrojomusic/animal转换成一个链接,然后用它修改为嵌入代码(它来自vimeo/youtube/metacafe regex):

代码语言:javascript
运行
复制
array(
   'https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([A-Za-z0-9_-]+)\/([A-Za-z0-9_-]+)[^< ]*',
   '<iframe width="100%" height="'.$s.'" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http://soundcloud.com/$1/$2&amp;auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&visual=false"></iframe>')

问题是当我试图解析像:https://soundcloud.com/theredrojomusic/sets/tristezza这样的集合时

这只是将url呈现为https://soundcloud.com/theredrojomusic/sets,而嵌入代码无法处理。

我试过这个:

代码语言:javascript
运行
复制
array(
    'https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([A-Za-z0-9_-])\/sets\/*([A-Za-z0-9_-]+)[^< ]*',
    '<iframe width="100%" height="'.$s.'" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http://soundcloud.com/$1/sets/$2&amp;auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&visual=false"></iframe>'), 

但是呈现的url是https://soundcloud.com/c/sets/tristezza

我希望有两个regex,一个用于非/sets/ urls,另一个用于/sets/,因为嵌入代码有点不同(至少如果我希望/sets/ 1看起来像一个列表而不是一首歌的话)。

我对regex很坏真的..。谁能给我指明正确的方向吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-31 08:54:38

第一个正则表达式是

代码语言:javascript
运行
复制
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([A-Za-z0-9_-]+)\/([A-Za-z0-9_-]+)[^< ]*

soundcloud\.com之后,有两个正斜杠,后面跟着α-数字序列。因此,它可以与soundcloud.com/wordOne/wordTwo匹配。不匹配的集合(即https://soundcloud.com/theredrojomusic/sets/tristezza)看起来像soundcloud.com/wordOne/wordTwo/wordThree

这两个示例没有显示所需文本后面的字符,但是第一个正则表达式的最后一部分是[^< ]*,它没有做任何有用的事情。它说寻找零或更多的字符,不是左-雪佛龙或空格,但它对他们什么都不做。假设左chevron或空格标志着想要的文本的结束,那么将正则表达式更改为

代码语言:javascript
运行
复制
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([A-Za-z0-9_-\/]+)[< ]

甚至是

代码语言:javascript
运行
复制
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([^< ]+)[< ]

首先查找任何字母数字序列加上正斜杠,然后是左雪佛龙或空格。第二种方法是寻找除左雪佛龙或空格以外的任何字符序列。如果没有更精确的说明所需要的内容,就很难说出需要什么正则表达式。

稍后,在代码的两个部分中都有一个src=...子句。其中有一个$1/$2,需要更改为$1

更新

为了在带有和不含/sets/的字符串上进行匹配,我建议使用上面给出的表达式,这两个版本都可以找到。然后,使用一个if语句来检查匹配的文本是否包含/sets/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23966898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档