<h1 class="section">あいうえお</h1>
<h1 id="SECTION">あいうえお</h1>
<h1>あいうえお</h1>
このどのパターンでもh1タグで囲まれている内容を変数として抽出できる正規表現を教えてください。
$pattern = "<h1>(.*)<\/h1>";
preg_match ( "/".$pattern."/i", $str, $match );
<?php $str='<h1>あいうえお1</h1> <h1 class="section">あいうえお2</h1> <h1 id="SECTION">あいうえお3</h1> <h1>あいうえお4</h1>'; $pattern='<h1.*?>(.*?)<\/h1>'; $i=preg_match_all('/'.$pattern.'/i',$str,$matches); for($j=0;$j<$i;$j++){ print $matches[1][$j].'<br>'; } ?>
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
ご質問の例を見る限り、PHPでの正規表現とお見受けしましたが、あっていますか?
であれば、
"<h1[^>]*>(.*)<\/h1>"
でマッチします。
"<h1"で始まり、</p>
">"以外の文字が0回以上繰り返し、
">"で終わった後の、
"任意の文字"の0回以上の繰り返しを
"</h1>"の直前まで
抽出する
という意味になります。
おご質問内容ではpreg_match関数=Perl互換の正規表現関数を例に挙げておられますが、
ご紹介した例の正規表現はeregi関数(=POSIX拡張正規表現関数)で使用できるパターンです。
使用例:
$aray_subject=array();
$aray_subject[]='<h1>パターン1あいうえお</h1>';
$aray_subject[]='<h1 class="section">パターン2あいうえお</h1>';
$aray_subject[]='<h1 id="SECTION">パターン3あいうえお</h1>';
$aray_subject[]='<h1>パターン4あいうえお</h1>';
$aray_subject[]='<h1 >パターン5あいうえお</h1>';
$aray_subject[]='そのほか';
$aray_subject[]='<hhh1>そのほか2</h1>';
for($i=0; $i < count($aray_subject); $i++){
$subject = $aray_subject[$i];
if(eregi("<h1[^>]*>(.*)<\/h1>",$subject,$matches)){
echo $matches[1];
echo "
\n";
}
}
?>
→結果
パターン1あいうえお
パターン2あいうえお
パターン3あいうえお
パターン4あいうえお
パターン5あいうえお
回答ありがとうございます。
試してみましたが動作しませんでした。