php preg_match在另一个字符串的中间提取一个字符串

时间:2013-04-12 11:59:54

标签: php regex

我正在尝试从此字符串中提取字符串:

...width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F84915247&color=da1716&auto_play=false&show_artwork=true"...

我想要的只是网址部分:

http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F84915247&amp

这是我制作的正则表达式:

$regex = "/^httpamp$/", but it does not work.

4 个答案:

答案 0 :(得分:1)

您可以使用:

/url=([^ ]*)/

该URL将位于第一个捕获组中。

答案 1 :(得分:1)

这将有效:

$regex = '~url=\K\S+?&amp~';

\K功能仅保留其位置后的字符)

或有一个lookbehind:

$regex = '~(?<=url=)\S+?&amp~';

答案 2 :(得分:0)

不建议使用正则表达式解析HTML文本,最好使用DOM解析器。

但是,如果您知道自己在做什么,请使用以下正则表达式:

~\?url=([^;]+)~

您想要的网址在匹配的组#1中可用。

现场演示:http://www.rubular.com/r/yiqtviBaSd

答案 3 :(得分:0)

@anubhava解决方案很好,但我已经对其进行了调整以改进它,并支持新的iframe HTML5 SoundCloud嵌入代码。

\?url=([^"]+)

这将匹配url但不匹配尾随的引号。这样,用户可以输入SoundCloud小部件,然后代码将删除小部件,只留下输入的URL。

然后,当您渲染到屏幕(从数据库输出)时,可以编写第二个脚本以匹配以http://api.soundcloud.com开头的SoundCloud URL并将其包装在窗口小部件中。