我正在尝试删除一个字符串,该字符串仅在使用cURL获取的页面上出现一次。例如:
<h3 class=" ">STRING IN QUESTION</h3>
或
<h3 class="active">STRING IN QUESTION</h3>
或
<h3 class=" active">STRING IN QUESTION</h3>
我想使用preg_match来做这件事,除非可以用资源消耗较少的方法完成。
这是我正在使用的正则表达式,它产生零结果:
<h3\sclass="\s">(.*?)</h3>
编辑:
以下是实际代码(此处使用的实际URL代替动态代码) - 发现当通过cURL提取时,class属性不存在,但仍然无法正常工作:
$ch = curl_init ("URL IN QUESTION");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);
preg_match('<h3>(.*?)</h3>', $page, $match);
print_r($match);
什么都不打印
答案 0 :(得分:3)
这就是诀窍:
$str='<h3 class=" ">STRING IN QUESTION</h3>';
preg_match('/<h3.*?>(.*?)<\/h3>/',$str,$match);
print_r($match);
输出:
Array
(
[0] => <h3 class=" ">STRING IN QUESTION</h3>
[1] => STRING IN QUESTION
)
说明:
<h3.*?> # Match h3 tags (non-greedy)
(.*?) # Match everything after tag (non-greedy, captured)
<\/h3> # Match closing tag - Note the escaped forward slash!
但是,该网址不包含<h3>
代码,但它确实包含<h1>
代码,为了与之匹配,您需要使正则表达式匹配换行符s
preg_match('/<h1.*?>(.*?)<\/h1>/s',$page,$match);
输出:
Array
(
[0] => <h1 class="">
<span class="pageTitle ">Braman Motorcars</span>
</h1>
[1] =>
<span class="pageTitle ">Braman Motorcars</span>
)
答案 1 :(得分:1)
也许:
<h3\s+class="\s*(active)?">(.*?)</h3>
然后使用\1
为“有问题的字符串”检索“有效”或“”和\2
我从来没有做过任何PHP,但也许这会有用吗?:
$result = "not found"
if (preg_match('#<h3\s+class="\s*(active)?">(.*?)</h3>#', $page, $match))
{
$result = $match;
}
print_r($result)
答案 2 :(得分:0)
尝试:
preg_match('#<h3\s?class="\s?(active)?">(.+)</h3>#', $yourString, $match);
请记住,在正则表达式中,您必须始终提供delimiter。