我有这个:
<tr class="tth3">
<td>aaa - bbbbb</td>
<td>6:10 </td>
<td >bla</td>
</tr>
<tr class="tth3">
<td>cccc - xxxx</td>
<td>6:10 </td>
<td>blabla</td>
</tr>
我将搜索此正则表达式:preg_match_all('/<tr class="tth3">.*?xxx.*?<\/[\s]*tr>/s', ...)
我的结果应该只是第二个<tr>..</tr>
,但我不知道如何使用这个正确所以任何人都可以帮助我吗?
答案 0 :(得分:2)
使用更好的解决方案, DOM :
<?php
/**
* Got this function from the manual's comments
*
* @param DOMNode $el
*
* @return mixed
*/
function innerHTML(DOMNode $el) {
$doc = new DOMDocument();
$doc->appendChild($doc->importNode($el, TRUE));
$html = trim($doc->saveHTML());
$tag = $el->nodeName;
return preg_replace('@^<' . $tag . '[^>]*>|</' . $tag . '>$@', '', $html);
}
$html = <<<HTML
<tr class="tth3">
<td>aaa - bbbbb</td>
<td>6:10 </td>
<td >bla</td>
</tr>
<tr class="tth3">
<td>cccc - xxxx</td>
<td>6:10 </td>
<td>blabla</td>
</tr>
HTML;
$document = new DOMDocument();
$document->loadHTML($html);
$tr_list = $document->getElementsByTagName("tr");
foreach ($tr_list as $tr) {
/** @var $tr DOMElement */
$td_list = $tr->getElementsByTagName("td");
foreach ($td_list as $td) {
if (preg_match("/xxxx/", $td->textContent)) {
//This is our TR!!
echo innerHTML($tr);
break(2); //Exit both loops
}
}
}
答案 1 :(得分:0)
我不认为将\s
类放在括号中是必要的,它甚至可能被解释为空间类以外的东西。不过,我不是百分百肯定的。
[\s]
无论哪种方式,用法是:
$num_matches = preg_match_all( '/<tr class="tth3">.*?xxx.*?<\/\s*tr>/s', $subject, $matches );
$num_matches
包含匹配字符串的数量$matches
包含实际匹配字符串的数组