我有一个带有字符串的php $variable
:
'<iframe width=\"660\" height=\"370\" frameborder=\"0\" scrolling=\"no\" src=\"http:\/\/api.dmcloud.net\/embed\/53b5149794739966184c1a71\/548f065806361d7e915cc89e?preset=543e41ca06361d414ze777c8\"><\/iframe>'
我需要在此变量的标记src中进行一些处理。我必须使用regexp,str_replace等...
首先,我需要在src中提取第二个ID,在我的示例中它是548f065806361d7e915cc89e
,之后,将所有src标记替换为其他字符串,如src = \&#34; My_New_String / ID_Extracted \&#34;
我怎么能用regexp做到这一点?还是其他?
谢谢!
编辑:我忘了指定,我在<iframe>
之前和之后有更多字符串,例如:
'XXXXXXXXXXXXX<iframe width=\"660\" height=\"370\" frameborder=\"0\" scrolling=\"no\" src=\"http:\/\/api.dmcloud.net\/embed\/53b5149794739966184c1a71\/548f065806361d7e915cc89e?preset=543e41ca06361d414ze777c8\"><\/iframe>XXXXXXXXXXXXXX'
答案 0 :(得分:1)
您可以使用preg_replace
$html = '<iframe width=\"660\" height=\"370\" frameborder=\"0\" scrolling=\"no\" src="sdfsdfsdfsdf"><\/iframe>';
$newhtml = preg_replace('/src=[^<]*<\\\/iframe>/', 'src=\"'.$mySrc.'\"></iframe>', $html);
答案 1 :(得分:1)
$iframe = '<iframe width=\"660\" height=\"370\" frameborder=\"0\" scrolling=\"no\" src=\"http:\/\/api.dmcloud.net\/embed\/53b5149794739966184c1a71\/548f065806361d7e915cc89e?preset=543e41ca06361d414ze777c8\"><\/iframe>';
$newIframe = preg_replace('%<iframe(.*?)src=\\\\".*?dmcloud.*?\\\\/embed\\\\/.*\\\\/(.*?)\?.*?"><\\\\/iframe>%', '<iframe $1 src=\"My_New_String/$2\"<\\\\/iframe>', $iframe);
echo $newIframe;
<强>输出:强>
<iframe width=\"660\" height=\"370\" frameborder=\"0\" scrolling=\"no\" src=\"My_New_String/548f065806361d7e915cc89e\"<\/iframe>
<强>样本:强>
答案 2 :(得分:1)
这应该有用..
$string = '<iframe width=\"660\" height=\"370\" frameborder=\"0\" scrolling=\"no\" src=\"http:\/\/api.dmcloud.net\/embed\/53b5149794739966184c1a71\/548f065806361d7e915cc89e?preset=543e41ca06361d414ze777c8\"><\/iframe>';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($string);
libxml_use_internal_errors(false);
$iframes = $doc->getElementsByTagName('iframe');
foreach ($iframes as $iframe) {
echo preg_replace('~.*/(.*?)(?:\?.*|$)~', '$1', $iframe->getAttribute('src'));
}
输出:
548f065806361d7e915cc89e
你的正则表达式不起作用,因为^src=\"(.)\"$
。
表示字符串必须以src="
开头。然后捕获一个字符.
。然后字符串结束($
(带"
。如果您向.
添加了量词,例如*
(前一个字符的零次或多次出现)或{ {1}}(一个或多个)并从锚点上取下它本来会更接近。你仍然不得不捏造ID。例如+
,会更接近,因为它捕获了所有的东西.*src=\"(.*?)\".*
属性(假设在开头和结尾只使用了双引号)。
我写的正则表达式转到最后src
并捕获那里的所有内容,直到第一个/
或字符串的结尾。然后它用只捕获的值(应该是id)替换字符串。更简洁的方法可能是使用preg_match,尽管你需要额外的一行来让它输出捕获的值。
?
答案 3 :(得分:1)
$test = '<iframe . . .';
$result = preg_match("/src.*\/([0-9a-f]*)\?/", $test, $out);
echo $out[1];