我似乎无法使用下面的代码获得我的预期结果(应该是"找到"),有人可以更正我的代码吗?我不断收到以下错误:
警告:preg_match_all():未知的修饰符'<'在第24行的C:\ xampp \ xampp \ htdocs \ lio \ lio2.php中 找不到
$content= file_get_contents('http://exampleonly.com');
$html ='
<a id="statusSectionTESTAUTOMATION" class="statusIcon">
<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"><span>The last build was not built</span>
</span>
</a>';
if(preg_match_all($content, $html))
{
echo "found";
} else {
echo "not found";
}
我也尝试过使用这个例子,因为上面代码中的$content
只是一个假人。我尝试将其应用于实时网址,而不是使用preg_match_all()
我使用了stristr()
。
$content= file_get_contents('http://www.isitdownrightnow.com/');
$html =
'
<td style="height:50px;border-bottom:1px solid #D8DFEA;" valign="top"><div class="ts1"></div>
<a href="http://www.isitdownrightnow.com/netflix.com.html" style="font-weight:700;">
Netflix</a>
<div class="status" style="margin-top:3px;">
<span class="up"></span>Netflix.com is up. Checked 0 seconds ago.</div>
</td>
';
if(stristr($content, $html))
{
echo "found";
} else {
echo "not found";
}
答案 0 :(得分:0)
preg_match_all
用于检查模式是否存在。
使用stristr
搜索字符串中的子字符串。
$content= file_get_contents('http://exampleonly.com');
$html ='
<a id="statusSectionTESTAUTOMATION" class="statusIcon">
<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"><span>The last build was not built</span>
</span>
</a>';
if(stristr($content, $html))
{
echo "found";
} else {
echo "not found";
}
答案 1 :(得分:0)
您可以尝试strpos功能。
使用示例:
$content= file_get_contents('http://exampleonly.com');
$html ='
<a id="statusSectionTESTAUTOMATION" class="statusIcon">
<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"><span>The last build was not built</span>
</span>
</a>';
if (strpos($html, $content) !== false) {
echo "found";
}else{
echo "not found";
}
重要:谨慎使用!==
而非!=
答案 2 :(得分:0)
我希望看到这个似乎被抛弃的问题找到解决方案,提供一些教育,并敦促一些最佳实践。
首先,为什么在preg_match_all()
尝试时出现错误?这是因为函数期望第一个参数是正则表达式模式,并且您提供了一个文字字符串。要解决此错误,您只需在$html
的值的两侧放置delimiters即可。在这个Demo中,您会看到我使用~
而不是更受欢迎的/
,因为这样可以避免不得不逃避&#34;模式本身中的/
。
$html='~
<a id="statusSectionTESTAUTOMATION" class="statusIcon">
<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"><span>The last build was not built</span>
</span>
</a>~'
作为效率和最佳实践的问题,我应该声明,如果你只是检查子串是否存在,那么使用preg_match_all()
- 搜索多次出现 - 是过度的。如果您的案例使用preg_match函数,请使用preg_match()
。
此外,我强烈建议您减少搜索文本。这是一个非常多的字符要搜索。
如果您在搜索文本的开头不需要换行符,请将其删除。如果在$html
的开头或结尾有一个换行符(不可见的空白字符),但在$content
中没有,则您将无法获得匹配。您\r\n
和\n
之间的$content
和$html
之间不匹配,或者因为您点击返回,完全可能会发生冲突在'
开头$html
之后,返回之后,'
导致不匹配。
更深层次的问题是,您是否可以在保持准确性的同时搜索id="statusSectionTESTAUTOMATION"
或title="Last build failed"
或aui-iconfont-error
?
如果没有,这还够吗? id="statusSectionTESTAUTOMATION" class="statusIcon">
<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"
?
如果您的搜索文本是文字和静态的,那么建议您使用非正则表达式解决方案。你似乎在寻找一个非常独特的子串,所以我不知道区分大小写是一个问题 - 你必须决定这个问题。
stristr()
是来自Sahil的错误建议(并且他已经在其他地方提出了这样的建议),因为它超过&#34;过度执行&#34;供您使用,效率低于stripos()
。这些非正则表达式函数将逐字检查您的子字符串(当然,不需要前面提到的分隔符)。
Manish Joshi博士的代码段不正确因为它已经扭转了&#34; haystack&#34;和#34;针&#34; (这是一个容易犯的错误)。对于区分大小写的搜索,您可以准确使用以下内容:(Demo)
$content='some text
<a id="statusSectionTESTAUTOMATION" class="statusIcon">
<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"><span>The last build was not built</span>
</span>
</a>some text';
$html ='<span title="Last build failed" class="aui-icon aui-icon-small aui-iconfont-error"><span>The last build was not built</span>';
if(strpos($content,$html)!==false){
echo "found";
}else{
echo "not found";
}
// output: found