Php 查找包含文本的标记

Php 查找包含文本的标记,php,regex,preg-match,Php,Regex,Preg Match,我有这个文本字符串 <div><div>Content</div><div><span>Searching</span></div></div> 我得到的最接近于 <div>(.*?)Searching(.*?)<\/div> 采用消极的前瞻性应对您有利: <div>((?:(?!<div>).)*)Searching(.*?)<\/div&g

我有这个文本字符串

<div><div>Content</div><div><span>Searching</span></div></div>
我得到的最接近于

<div>(.*?)Searching(.*?)<\/div>

采用消极的前瞻性应对您有利:

<div>((?:(?!<div>).)*)Searching(.*?)<\/div>
((?:(?!))*)搜索(*)
.

您应该试试X-path, 如果这个问题被放在Perl上,那么我肯定会帮助你,但是我会给你Perl代码,也许这个对你有帮助

use XML::XPath;
use XML::XPath::XMLParser;

my $dir = 'd:/00Tools/Testing/gui';  #set any dir path
    foreach my $grep_file (glob("$dir/*.htm"))  # get all .htm file inside folder
    {
        my $xp = XML::XPath->new(filename => $grep_file);
        my $nodeset = $xp->find('/html/body/div//div/span'); # find span in this situation
        foreach my $node ($nodeset->get_nodelist)
        {
            my $final_th_node = XML::XPath::XMLParser::as_string($node);
            if ($final_th_node =~ /<span>Searching<\/span>/)    #test our conditon
                {
                    print "true";
                }
            else
                {
                    print "false";
                }

        }
    }
使用XML::XPath;
使用XML::XPath::XMLParser;
my$dir='d:/00Tools/Testing/gui'#设置任意dir路径
foreach my$grep_文件(glob($dir/*.htm))#在文件夹中获取all.htm文件
{
我的$xp=XML::XPath->new(文件名=>$grep\u文件);
my$nodeset=$xp->find('/html/body/div//div/span');#在这种情况下查找span
foreach my$node($nodeset->get\u nodelist)
{
我的$final_th_node=XML::XPath::XMLParser::as_string($node);
如果($final_th_node=~/search/)#测试我们的条件
{
打印“真”;
}
其他的
{
打印“假”;
}
}
}

搜索的可能重复我认为解析html和使用dom比使用正则表达式要好。使用正则表达式无法可靠地解析标记!请改为尝试DOMDocument和DOMXPath。@GordonM我现在看到了我的错误,但我并不试图解析html或xhtml,只是将此作为示例。在这两个字符串之间有起始字符串、结束字符串和单词(但也可以有更多的随机文本)。只需要找到最小的匹配项,因为可以有多个起始字符串和结束字符串。我想对此进行修正,因为它建议使用适当的解析库(大概相当于PHP DOMDocument和DOMXpath)而不是regex,但我不能,因为示例使用的语言与问题不符。
<div>((?:(?!<div>).)*)Searching(.*?)<\/div>
use XML::XPath;
use XML::XPath::XMLParser;

my $dir = 'd:/00Tools/Testing/gui';  #set any dir path
    foreach my $grep_file (glob("$dir/*.htm"))  # get all .htm file inside folder
    {
        my $xp = XML::XPath->new(filename => $grep_file);
        my $nodeset = $xp->find('/html/body/div//div/span'); # find span in this situation
        foreach my $node ($nodeset->get_nodelist)
        {
            my $final_th_node = XML::XPath::XMLParser::as_string($node);
            if ($final_th_node =~ /<span>Searching<\/span>/)    #test our conditon
                {
                    print "true";
                }
            else
                {
                    print "false";
                }

        }
    }