Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得<;span>;在php中通过了解其内部HTML输出字符串?_Php_Html_Regex_Wordpress_Preg Match - Fatal编程技术网

如何获得<;span>;在php中通过了解其内部HTML输出字符串?

如何获得<;span>;在php中通过了解其内部HTML输出字符串?,php,html,regex,wordpress,preg-match,Php,Html,Regex,Wordpress,Preg Match,我正在尝试获取元素之间生成的字符串结构,其中包含文本“Bonkers” 例如: <span> Bonkers </span> 疯子 或 疯子 或 疯子 问题是我不知道跨度结构,但我知道“疯子”会在里面 我想返回整个文本字符串结构(包括打开和关闭标记),以便以后可以替换它。 例如: $spanwithbonkers='Bonkers'; 到目前为止,这是我所拥有的,但它不起作用: <?php $homepage = file_get_con

我正在尝试获取
元素之间生成的字符串结构,其中包含文本“Bonkers”

例如:

  <span>    Bonkers </span> 
疯子

疯子

疯子
问题是我不知道跨度结构,但我知道“疯子”会在里面

我想返回整个文本字符串结构(包括打开和关闭标记),以便以后可以替换它。 例如:

$spanwithbonkers='Bonkers';
到目前为止,这是我所拥有的,但它不起作用:

 <?php

 $homepage = file_get_contents('http://www.example.com/');

  preg_match('/^<span>^Bonkers^</span>/', $homepage, $matches);

  $spanwithbonkers = $matches[0]);


?>

比使用正则表达式解析HTML更好的方法是使用和类。您可以将HTML加载到文档中,然后使用XPath查找特定元素,然后处理这些元素。在您的例子中,我们通过比较每个span节点的
文本
值来查找span,包括单词
Bonkers

$html = '<body><div><div><span id="b">    Bonkers  </span></div></div>
         <div><span> no bonk</span>
              <span> This is bonkers!</span>
         </div></body>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$spans = $xpath->query("//span[contains(text(), 'Bonkers')]");
foreach ($spans as $span) {
    echo $span->C14N();
}
输出

<span id="b"> Bonkers </span> 
<span> This is bonkers!</span>
疯子
这太疯狂了!

就像我说的,我不确定是否应该使用preg\u match。我需要一个解决方案!如果中间没有
,你可以使用。它使用
你的代码返回一个var\u dump字符串:string(33)“Bonkers”我假设有33个空格,但我不知道如何让它返回标记(包括空格)让它成为一个答案,这样我就可以给你信用。虽然我看不到空格,但当我使用$spanwithbonkers作为字符串时,它捡起了它!
 <?php

 $homepage = file_get_contents('http://www.example.com/');

  preg_match('/^<span>^Bonkers^</span>/', $homepage, $matches);

  $spanwithbonkers = $matches[0]);


?>
$html = '<body><div><div><span id="b">    Bonkers  </span></div></div>
         <div><span> no bonk</span>
              <span> This is bonkers!</span>
         </div></body>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$spans = $xpath->query("//span[contains(text(), 'Bonkers')]");
foreach ($spans as $span) {
    echo $span->C14N();
}
<span id="b"> Bonkers </span>
$spans = $xpath->query('//span');
foreach ($spans as $span) {
    if (stripos($span->textContent, 'Bonkers') !== false) {
        echo $span->C14N() . "\n";
    }
}
<span id="b"> Bonkers </span> 
<span> This is bonkers!</span>