わかりました。これはかなり基本的な質問ですが、PHPは初めてで、理解できませんでした。入力文字列は$ dataで、引き続きプルして使用するだけです最初の一致です。以下は正しくありませんか?これは、2つのhtmlタグ(最初に見つかったセット)の間にコンテンツをプルして、残りのデータを破棄しようとするだけで、アクションを実行する最良の方法ではない場合もあります。よく似た質問です。すべて読んでください。これを行うためのより良い方法と、残りのコードの残りの新しい入力として一致を定義する方法がある場合、私の質問は混合です。$ matchesを$ data2に変更した場合そこからそのまま使用すると、エラーが返されます。
preg_match('/<h2>(.*?)<\/h2>/s', $data, $matches);
通常、問題には正規表現を使用することをお勧めします。
http://php.net/preg_match を見ると、複数の一致がある可能性があるため、$ matchesは配列になります。試す
print_r($matches);
結果がどのように見えるかを理解し、適切なインデックスを選択します。
編集:
一致がある場合、括弧グループ間で抽出されたテキストを取得できます
print($matches[1]);
括弧グループが複数ある場合は、2、3などの番号が付けられます。一致しない場合も考慮する必要があります。この場合、配列のサイズは0になります。
preg_match
を介してHTMLを解析せず、代わりにこれを使用してくださいPHPクラス:
例:
<?php
$html= "<p>hi</p>
<h1>H1 title</h1>
<h2>H2 title</h2>
<h3>H2 title</h3>";
// a new dom object
$dom = new domDocument('1.0', 'utf-8');
// load the html into the object
$dom->loadHTML($html);
//discard white space
$dom->preserveWhiteSpace = false;
$hTwo= $dom->getElementsByTagName('h2'); // here u use your desired tag
echo $hTwo->item(0)->nodeValue;
//will return "H2 title";
?>
あなたはそれをこのようにすることができます::
$h1 = preg_replace('/<h1[^>]*?>([\\s\\S]*?)<\/h1>/',
'\\1', $h1);
これにより、<H1></H1>
HTMLタグからTEXTが取り除かれるか、ラップが解除されます