2013-03-08 163 views
0

如何借此:PHP获得css类并将其分配给rel属性

<img class="classone twoclass alignLEFT" src="xxxx" /> 

搜索词“对齐”之类的阵列中,取字“对齐”的其余部分(在此情况“左”)并将其分配给实际的对齐属性?

<img class="classone twoclass alignLEFT" align="LEFT" src="xxxx" /> 

我知道我需要

$needle = "align"; 
$haystack = "<img class="classone twoclass alignLEFT" src="xxxx" />" 

什么我要找的是

$pincushion = {{the rest of the word from $needle}} 

所以基本上我做了一个$needlepreg_match。如果找到了,我如何获得该词的其余部分(即$pincushion)?我试过preg_split但它不允许我使用“align”作为分隔符。 (有道理)

这不能是jquery/javascript - 它必须发生在呈现的html代码中。

有什么想法?我花了10个小时寻找答案,没有真正的运气。 我确实碰到过DomDocument,但无法找到我需要的东西。

+0

PHP正则表达式问题 如何借此 IMG类=“classone twoclass alignLEFT” SRC =“XXXX”/ 搜索“对齐”,并得到该字的其余部分 - 适用于align属性 img class =“classone twoclass alignLEFT”align =“LEFT”src =“xxxx”/ 正则表达式正在杀死我 - 太多的移动部件。我知道我需要 $ needle =“align”; $ haystack =“img class =”classone twoclass alignLEFT“src =”xxxx“/” 我正在寻找的是 $ pincushion = {{从$ needle的单词的其余部分}} – Acts7Seven 2013-03-08 16:33:00

回答

0
preg_match_all('#align(.*?)(")#si', '<img class="classone twoclass alignLEFT" src="xxxx" />', $arr, PREG_PATTERN_ORDER); 

结果:

Array 
(
[0] => Array 
    (
     [0] => alignLEFT" 
    ) 

[1] => Array 
    (
     [0] => LEFT 
    ) 

[2] => Array 
    (
     [0] => " 
    ) 

) 

释: #align(.*?)(")#si寻找褐藻胶,然后通过n-chars"分隔

+0

preg_match_all(' #align(。*?)(“)#si',$ content,$ arr,PREG_PATTERN_ORDER); print_r($ arr [0]);这样做返回Array([0] => alignleft size-full image-10968 “)这个正则表达式只应该走到这个单词的最后?或行结束?我将如何阻止它在“alignleft”,而不是继续大小完整的图像10968等? – Acts7Seven 2013-03-08 21:27:30

+0

preg_match_all('#align(。*?)(“)#si','',$ arr,PREG_PATTERN_ORDER); print_r($ arr [1] [0]); AHHH THERE THIS YOU THAN YOU! http://coursesweb.net/php-mysql/multidimensional-array-functions – Acts7Seven 2013-03-08 21:39:54

+0

其他人的最后一张笔记...我改变了preg_match_all('#align(。*?)(\ b)#si,'' ,$ arr,PREG_PATTERN_ORDER); 添加(\ b)允许我分开每个单词。而不是直到“结束”,因为它可能有些愚蠢意味着可能同时将alignLEFT和alignRIGHT分配为类(你永远不知道别人编辑html时可能会遇到什么) 然后我带入 – Acts7Seven 2013-03-08 21:42:45

0

由于您正在使用HTML,因此您可以使用DOMDocument。它多一点抽出,但可能更容易阅读和变化不是一个复杂的正则表达式

有图书馆,在那里,是在对付比DOM文档HTML片段更好,但如果你想使用内置的功能,DOM文档是要走的路。

<?php 

$html = '<img class="" src="xxxx" />adasdasdasd<img class="classone twoclass alignLEFT" src="xxxx" />'; 

$domdoc = new DOMDocument(''); 
$domdoc->loadHTML($html); 

$xpath = new DOMXpath($domdoc); 

$imgs = $xpath->query('//img'); 


foreach ($imgs as $element) { 

    $class = $element->getAttribute('class'); 

    if (strpos($class, 'alignLEFT') !== false) { 

     $element->setAttribute('align', 'left'); 
    } 

} 

// DOM Document works with full html documents, so now we have to isolate our fragment 

$bodyelement = $xpath->query('/html/body'); 
$bodyhtml = $domdoc->saveXML($bodyelement->item(0)); 

echo str_replace(array('<body>', '</body>'), '', $bodyhtml); 
+0

谢谢!我遇到问题的地方是使用“对齐”作为搜索参数并获取剩余的单词。 alignleft或alignright或alignnone是最常见的。我想分别为对齐部分返回“左”或“右”或“无” – Acts7Seven 2013-03-08 21:15:06

相关问题