Rya*_*per 11 html php arrays string preg-match
好的,这是一个非常基本的问题我确定但我是PHP新手并且无法弄明白.输入字符串是$ data我试图继续拉动并仅使用第一个匹配.以下是不正确的?这甚至可能不是执行操作的最佳方式,我只是试图在两个html标签之间拉出内容(找到第一个集合)并丢弃其余数据.我知道有类似的问题,我已经阅读了它们,我的问题是混合,如果有更好的方法来做到这一点以及我如何将匹配定义为其余剩余代码的新输入.如果我将$ match更改为$ data2并从那里开始使用它会返回错误.
preg_match('/<h2>(.*?)<\/h2>/s', $data, $matches);
Run Code Online (Sandbox Code Playgroud)
diE*_*cho 22
不要解析HTML preg_match,而是使用这个PHP类:
例:
<?php
$html= "<p>hi</p>
<h1>H1 title</h1>
<h2>H2 title</h2>
<h3>H2 title</h3>";
// a new dom object
$dom = new domDocument('1.0', 'utf-8');
// load the html into the object
$dom->loadHTML($html);
//discard white space
$dom->preserveWhiteSpace = false;
$hTwo= $dom->getElementsByTagName('h2'); // here u use your desired tag
echo $hTwo->item(0)->nodeValue;
//will return "H2 title";
?>
Run Code Online (Sandbox Code Playgroud)
Eri*_*rik 12
使用正则表达式通常是您的问题的好主意.
当您查看http://php.net/preg_match时,您会看到$ matches将是一个数组,因为可能有多个匹配.尝试
print_r($matches);
Run Code Online (Sandbox Code Playgroud)
了解结果的外观,然后选择正确的索引.
编辑:
如果匹配,则可以在括号组之间提取文本
print($matches[1]);
Run Code Online (Sandbox Code Playgroud)
如果你有多个括号组,它们将被编号为2,3等.你也应该考虑没有匹配的情况,在这种情况下数组的大小为0.