Soundcloud PHP ubb解析器

时间:2013-10-23 14:05:57

标签: php regex preg-replace soundcloud bbcode

$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,但这不起作用。

有人可以帮我解决我的正则表达式错误吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

你的模式没有很好地逃脱。

  1. 由于您使用的分隔符不是/,因此您无需转义所有斜杠。关闭方括号不需要转义:

    ~\[soundcloud]http://soundcloud.com/(.*)/\[/soundcloud]~is

  2. 要捕获网址,请使用贪心量词*。如果您的字符串中有多个[soundcloud]标记,则会出现问题,因为捕获将停在最后一个结束标记处。要解决此问题,您可以使用延迟量词*?

    ~\[soundcloud]http://soundcloud.com/(.*?)/\[/soundcloud]~is

    你也可以试试这个:

    ~\[soundcloud]http://soundcloud.com/([^/]+)/\[/soundcloud]~i

  3. 您的捕获位于第一个捕获组中。然后他的引用是$1而不是$0,这是整场比赛。

  4. 对于替换字符串,请使用简单的引号以避免转义内部的所有双引号:

    '<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=$1"></iframe>'