我尝试使用正则表达式将soundcloud解析为从链接中提取的嵌入代码
如果我把这个url:https://soundcloud.com/theredrojomusic/animal首先转换为链接,然后更改为嵌入代码(使用vimeo / youtube / metacafe正则表达式),就这么远了:
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
这样的集合时这只是将网址呈现为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>'),
但是呈现的网址有https://soundcloud.com/c/sets/tristezza
我想有两个正则表达式,一个用于非/sets/
网址,另一个用于/sets/
,因为嵌入代码有点不同(至少如果我想要/sets/
一个看起来像一个列表,而不仅仅是一首歌。)
我真的很难用正则表达式...有人能指出我正确的方向吗?
由于
答案 0 :(得分:2)
第一个正则表达式是
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
。
这两个示例没有显示所需文本后面的字符,但是第一个正则表达式的最后一部分是[^< ]*
,它没有做任何有用的事情。它表示寻找零个或多个不是左前卫或空间的角色,但它对它们没有任何作用。假设左V形或空格标记了所需文本的结尾,那么将正则表达式更改为
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([A-Za-z0-9_-\/]+)[< ]
甚至
https{0,1}:\/\/w{0,3}\.*soundcloud\.com\/([^< ]+)[< ]
首先查看任何序列的字母数字加上正斜线,然后是左V形或空格。第二个查找除左V形或空格之外的任何字符序列。如果没有更准确的说明需要什么,很难说正则表达式是什么。
稍后在代码的两个部分中都有一个src=...
子句。其中有一个$1/$2
,需要更改为$1
。
更新
要匹配包含和不包含/sets/
的字符串,我建议使用上面给出的表达式来查找这两个版本。然后使用if
语句检查匹配的文本是否包含/sets/
。