0

cURLを使用して取得したページで1回だけ発生する文字列を削除しようとしています。例:

<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を介してプルされた場合、クラス属性は存在しませんが、示されているように機能しないことがわかりました:

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

正規表現では、常に区切り文字を指定する必要があることを忘れないでください。

于 2012-11-25T20:37:14.747 に答える