0

我正在尝试删除一个字符串,该字符串仅在使用 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 代替动态 URL)- 发现当通过 cURL 拉取时,类属性不存在,但仍无法正常工作,如下所示:

$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);

什么都不打印

4

3 回答 3

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!

但是,该 URL<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>

)
于 2012-11-25T20:39:34.010 回答
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)
于 2012-11-25T20:25:51.367 回答
0

尝试:

preg_match('#<h3\s?class="\s?(active)?">(.+)</h3>#', $yourString, $match);

请记住,在您的正则表达式中,您必须始终提供delimiter

于 2012-11-25T20:37:14.747 回答