我该怎么做:
<img class="classone twoclass alignLEFT" src="xxxx" />
在类数组中搜索单词“align”,取“align”一词的其余部分(在本例中为“left”)并将其分配给实际的align属性?
<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}}
基本上我正在为preg_match
做$needle
。如果找到,我该如何获得该单词的其余部分(即$pincushion
)?
我试过了preg_split
,但它不允许我使用“align”作为分隔符。 (有道理)
这不能是jquery / javascript - 它必须在渲染的html代码中发生。
有什么想法?我花了10个小时来寻找没有真正运气的答案。 我确实遇到过DomDocument,但无法找到我需要的东西。
答案 0 :(得分: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
或"
分隔的后的algin。
答案 1 :(得分:0)
由于您正在使用HTML,因此您可以使DOMDocument正常工作。它有点抽象,但可能比复杂的正则表达式更容易阅读和更改
有些库在处理HTML片段方面比domdocument更好,但是如果你想使用内置函数,那么domdocument就是你的选择。
<?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);