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";
}
}
}