正则表达式:从标签

时间:2017-10-23 12:55:37

标签: php regex

我正在构建一个所见即所得的扩展程序并构建了一个用于图像上传和处理的库。 为了进一步集成代码,我想从wysiwyg输出中提取一些数据,如下所示:

$content = '<img class="left media-id-1657" src="someurl" width="113" height="97" />';
preg_match_all('/<[^>]*class="[^"]*\media-id-([0-9]{1,10})\b[^"]*"[^>]*>/i', $content, $matches);

这给了我给定的id,在这种情况下是1657。它工作得很好,不需要改变。

但是现在我还需要获得宽度(和高度)。但由于一些愚蠢的原因,我无法提取它。我想出了这个:

/<[^>]*class="[^"]*\media-id-([0-9]{1,10})\b[^"]*width="([0-9]{1,10})"[^>]*>/i

但它没有做我想要的,因为它给了0场比赛。 http://regexr.com/3h14n

4 个答案:

答案 0 :(得分:0)

试试这个

preg_match( '/width="(.*?)"/', $content, $matchesWidth);
preg_match( '/height="(.*?)"/', $content, $matchesHeight);
print_r($matchesWidth[1]); //Output 113
print_r($matchesHeight[1]); //Output 97

答案 1 :(得分:0)

抱歉,经过一番游戏后已经知道了。

/<[^>]*class="[^"]*\media-id-([0-9]{1,10})\b[^"]*"[^>]*width="([0-9]{1,10})"[^>]*height="([0-9]{1,10})"[^>]*>/i

答案 2 :(得分:0)

字符串的\bwidth部分之间有引号,但不是正则表达式。

这是否有效:

/<[^>]*class="[^"]*\media-id-([0-9]{1,10})\b.*width="([0-9]{1,10})"[^>]*>/i

答案 3 :(得分:0)

如果您需要使用一个正则表达式完成所有操作,这应该适用于当前顺序中的参数:

<img class="\D+(\d+)".*?width="(\d+)" height="(\d+)"

话虽这么说,如果在宽度,高度或其他任何东西之间有额外的空格,那么它就会胜出。您必须为这些问题编写代码,但如果您确信数据始终采用该格式,则可以使用。我个人会把它分成3个正则表达式。你当前的那个,然后高度和宽度非常简单:

width="(\d+)"
height="(\d+)"