$string = preg_replace("_\[soundcloud\]/http:\/\/soundcloud.com\/(.*)/\[/soundcloud\]_is", "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=\$0\"></iframe>", $string);
再次问好Stackoverflow!
我希望我的UBB解析器支持soundcloud链接,解析为
[soundcloud](url)[/soundcloud]
到
<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url= (url) "></iframe>
使用上面的preg_replace
,但这不起作用。
有人可以帮我解决我的正则表达式错误吗?
提前致谢!
答案 0 :(得分:2)
你的模式没有很好地逃脱。
由于您使用的分隔符不是/
,因此您无需转义所有斜杠。关闭方括号不需要转义:
~\[soundcloud]http://soundcloud.com/(.*)/\[/soundcloud]~is
要捕获网址,请使用贪心量词*
。如果您的字符串中有多个[soundcloud]
标记,则会出现问题,因为捕获将停在最后一个结束标记处。要解决此问题,您可以使用延迟量词*?
:
~\[soundcloud]http://soundcloud.com/(.*?)/\[/soundcloud]~is
你也可以试试这个:
~\[soundcloud]http://soundcloud.com/([^/]+)/\[/soundcloud]~i
您的捕获位于第一个捕获组中。然后他的引用是$1
而不是$0
,这是整场比赛。
对于替换字符串,请使用简单的引号以避免转义内部的所有双引号:
'<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=$1"></iframe>'