1
$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上述方法,但这不起作用。

有人可以帮我我的正则表达式有什么问题吗?

提前致谢!

4

1 回答 1

2

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

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

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

  2. 要捕获 url,您使用贪婪的量词*。如果您的字符串中有多个[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>'

于 2013-10-23T14:18:57.817 回答