检索 ID PHP preg_match_all
Retrieve ID PHP preg_match_all
我想从以下 table 中检索“376901”:
<td class="evn_tdata_l">Reconciliation-Manager_RECON-MGMT_SFTP_T</td>
<td class="evn_tdata_l">376901</td>
现在我试过的是以下代码:
if (preg_match_all("/<td[^>]+?>Reconciliation-Manager_RECON-MGMT_SFTP_T<\/td><td[^>]+?>(.*)<\/td>/s", $html, $matches)) {
print_r($matches);
} else {
echo "No se encontró ninguna coincidencia.";
我没看出哪里不对,请指教?
谢谢。
在<td>
之间添加\s*
/<td[^>]+?>Reconciliation-Manager_RECON-MGMT_SFTP_T<\/td>\s*<td[^>]+?>(.*)<\/td>/sU
您的模式中的问题是您没有描述换行符,最终没有描述第一个结束标记 </td>
和随后的开始标记 <td...
之间的其他白色 space 字符.
但是你可以使用一种不关心这些细节的方式,只使用html结构。
作为结构化数据,您可以使用 xpath 查询在 XML 或 HTML 内容中获取所需的信息,例如:
$html = <<<'EOD'
<td class="evn_tdata_l">Reconciliation-Manager_RECON-MGMT_SFTP_T</td>
<td class="evn_tdata_l">376901</td>
EOD;
$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXPath($dom);
$query = '//td[@class="evn_tdata_l" and text()="Reconciliation-Manager_RECON-MGMT_SFTP_T"]/following-sibling::td[1]';
$result = $xp->query($query)->item(0)->nodeValue;
echo $result;
我想从以下 table 中检索“376901”:
<td class="evn_tdata_l">Reconciliation-Manager_RECON-MGMT_SFTP_T</td>
<td class="evn_tdata_l">376901</td>
现在我试过的是以下代码:
if (preg_match_all("/<td[^>]+?>Reconciliation-Manager_RECON-MGMT_SFTP_T<\/td><td[^>]+?>(.*)<\/td>/s", $html, $matches)) {
print_r($matches);
} else {
echo "No se encontró ninguna coincidencia.";
我没看出哪里不对,请指教? 谢谢。
在<td>
\s*
/<td[^>]+?>Reconciliation-Manager_RECON-MGMT_SFTP_T<\/td>\s*<td[^>]+?>(.*)<\/td>/sU
您的模式中的问题是您没有描述换行符,最终没有描述第一个结束标记 </td>
和随后的开始标记 <td...
之间的其他白色 space 字符.
但是你可以使用一种不关心这些细节的方式,只使用html结构。 作为结构化数据,您可以使用 xpath 查询在 XML 或 HTML 内容中获取所需的信息,例如:
$html = <<<'EOD'
<td class="evn_tdata_l">Reconciliation-Manager_RECON-MGMT_SFTP_T</td>
<td class="evn_tdata_l">376901</td>
EOD;
$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXPath($dom);
$query = '//td[@class="evn_tdata_l" and text()="Reconciliation-Manager_RECON-MGMT_SFTP_T"]/following-sibling::td[1]';
$result = $xp->query($query)->item(0)->nodeValue;
echo $result;