我在php中遇到了字符串preg匹配。 从下面的字符串我需要匹配'index.php?c_id ='并需要获取该字符串的值。 (例如:index.php?c_id = 161377)
$str = '<h3>Resources</h3>
<p><a href="index.php?ci_id=161377">Announcing Upgraded Firmware for N3680 Decoded 2D Imager</a></p>
<p><a href="https://www.honeywellaidc.com/products/oem-scan-engines/2d-imagers/n3680-series">N3680 Product webpage</a></p>
<p><a href="index.php?ci_id=161376">N3680 Product datasheet</a></p>';
preg_match_all('#index.php?([^\s]+)"#', $str, $matches,PREG_OFFSET_CAPTURE);
print_r($matches[1]);
我需要输出: 161377 161376
谢谢&amp;问候 麻醉剂
答案 0 :(得分:0)
在primis 中通常是一个坏主意。它在这里工作只是因为你没有尝试比找到一个单词更复杂的东西,但是在将来避免这种策略,或者你最终会尝试做一些无法做到的事情。
除了警告,你只是在错误的地方寻找。 preg_match&#39; s documentation说
如果提供了匹配,那么它将填充搜索结果。
$matches[0]
将包含与完整模式匹配的文本,$matches[1]
将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。
为了找到所有匹配项,您只需查看$matches[0]
而不是$matches[1]
(或从1开始查看$matches
的所有位置)
答案 1 :(得分:0)
谢谢你们,感谢您的支持。根据您的意见,我找到了答案。
$str = '<h3>Resources</h3>
<p><a href="index.php?ci_id=161377">Announcing Upgraded Firmware for N3680 Decoded 2D Imager</a></p>
<p><a href="https://www.honeywellaidc.com/products/oem-scan-engines/2d-imagers/n3680-series">N3680 Product webpage</a></p>
<p><a href="index.php?ci_id=161376">N3680 Product datasheet</a></p>';
preg_match_all('/index\.php\?ci_id=([0-9]+)/', $str, $matches,PREG_OFFSET_CAPTURE);
$i=0;
foreach($matches[1] as $key => $val)
{
echo '<br>'.$val[$i];
}
答案 2 :(得分:0)
不要使用正则表达式来解析html。相反,DomDocument和Xpath可以做这项工作
$dom = new DomDocument();
$dom->loadHTML($str);
$xpath = new DomXpath($dom);
$hrefs = $xpath->evaluate('//a[starts-with(@href, "index.php?ci_id")]/@href');
foreach($hrefs as $href) {
list(, $ci_id) = explode('=', $href->nodeValue);
echo $ci_id ."<br>\n";
}
<强> demo 强>