标签:html php regex html-parsing
我是正则表达式的新手.我想问一下这个html标签的正确组合是什么:
<tr class="calendar_row" data-eventid="39654">
<td class="alt1 eventDate smallfont" align="center"/></td>
<td class="alt1 smallfont" align="center">3:34am</td>
<td class="alt1 smallfont" align="center">CNY</td>
</tr>
我用这个:
$html = website html from a url
$match = array();
$pattern = "/(<tr.*?\data-eventid\>.*?<\/tr>)/ims";
preg_match_all($pattern, $html, $match);
但它不起作用:|
我只想选择那个tr元素的所有内容..
最好的祝福.
解决方法:
使用DOMDocument
你不应该在这样的事情上使用正则表达式;而是从您的标记创建一个DOMDocument,然后从该特定元素中选择子元素.例如,以下内容将为我们提供每个< td>的集体html.标记中的标记:
// Our HTML will eventually go here
$innerHTML = "";
// Create a new DOMDocument based on our HTML
$document = new DOMDocument;
$document->loadHTML($html);
// Get a NodeList of all <td> Elements
$cells = $document->getElementsByTagName("td");
// Cycle over each <td>, adding its HTML to $innerHTML
foreach ($cells as $cell) {
$innerHTML .= $document->saveHTML($cell);
}
// Output our glorious HTML
echo $innerHTML;
常用表达
如果你真的想要使用preg_match来获取tr标签之间的内容,则以下内容应该有效:
// Our pattern for capturing all that is between <tr> and </tr>
$pattern = "/<tr[^>]*>(.*)<\/tr>/s";
// If a match is found, store the results in $match
if (preg_match($pattern, $html, $match)) {
// Show the captured value
echo $match[1];
}
其结果如下:
<td class="alt1 eventDate smallfont" align="center"></td>
<td class="alt1 smallfont" align="center">3:34am</td>
<td class="alt1 smallfont" align="center">CNY</td>
标签:html,php,regex,html-parsing 来源: https://codeday.me/bug/20190901/1783394.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。