我正在尝试执行一个正则表达式来将soundcloud解析为从链接中提取的嵌入代码
到目前为止,如果我先将这个url:https://soundcloud.com/theredrojomusic/animal转换成一个链接,然后用它修改为嵌入代码(它来自vimeo/youtube/metacafe regex):
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&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
,而嵌入代码无法处理。
我试过这个:
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&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很坏真的..。谁能给我指明正确的方向吗?
谢谢
发布于 2014-05-31 08:54:38
第一个正则表达式是
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或空格标志着想要的文本的结束,那么将正则表达式更改为
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([A-Za-z0-9_-\/]+)[< ]
甚至是
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([^< ]+)[< ]
首先查找任何字母数字序列加上正斜杠,然后是左雪佛龙或空格。第二种方法是寻找除左雪佛龙或空格以外的任何字符序列。如果没有更精确的说明所需要的内容,就很难说出需要什么正则表达式。
稍后,在代码的两个部分中都有一个src=...
子句。其中有一个$1/$2
,需要更改为$1
。
更新
为了在带有和不含/sets/
的字符串上进行匹配,我建议使用上面给出的表达式,这两个版本都可以找到。然后,使用一个if
语句来检查匹配的文本是否包含/sets/
。
https://stackoverflow.com/questions/23966898
复制相似问题