個人事業主の方必見!確定申告のお悩み解決

preg_matchを使って指定したファイルのタグを抽出するにはどうしたらいいのでしょうか?
例えば、
<title>●●</title>

の●●を抜き出すにはどうすれば良いのでしょうか?

ご回答よろしくお願いいたします。

A 回答 (2件)

先読み・戻り読みをつかえば0番目の要素でマッチできます



<?php
$pattern= "/(?<=<(title)>).*?(?=<\/\\1>)/i";
$str = "<html>\n<head>\n<title>テスト</title>\n</head>";
preg_match($pattern,$str,$matches);
print $matches[0];
?>
    • good
    • 0

完璧ではありませんがこんな感じで



<?php

$pattern= "/<title>(.*?)<\/title>/u";
$subject = "<title>●●●</title>";

preg_match($pattern,$subject,$matches);

print_r($matches);

?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHPでタグ内からURLと文字を抜き出したい

PHP4.3で
$html_tag = '<a href="http://www.hogehoge.com/hogehoge/hoge/sample.html" class="hogehoge" title="hogehoge">りんく先名称</a>';
というような変数から
「http://www.hogehoge.com/hogehoge/hoge/sample.html」
のURLと
「りんく先名称」という<a>で囲まれた文字列を抜き出したいのです。

preg_matchを使っていろいろやってみたのですが、どうもうまくいきません。というか、正規表現がどのように書いていいのかわからないのですが・・・
そもそもpreg_matchを使わずとも簡単な方法があるのでしょうか?

大変恐れ入りますが、ご教授いただけませんでしょうか?

Aベストアンサー

この例をもとにして思いっきりはしょって書くと

<?
$html_tag = '<a href="http://www.hogehoge.com/hogehoge/hoge/sample.html" class="hogehoge" title="hogehoge">りんく先名称</a>';
preg_match("|<a href=\"(.*?)\".*?>(.*?)</a>|mis",$html_tag,$matches);
$url=$matches[1];
$text=$matches[2];
?>

Q正規表現で複数行に渡る範囲を取り出す

<html>

<div></div>

<div class="content">
<b>内容<b/><br />
<img src="#" />
<p>ほげほげほげほげ</p>
</div>

<div></div>

</html>

上のようなHTMLがあるとします。<div>の前後にもhtmlは書かれています。
そこから正規表現で<div class="content">~~~</div>の中身を取り出したいのですが、できません。
言語はPHPで、

/<div class=\"content\">.*<\/div>/
と書いてみたんですが、改行などがありうまくいきませんでした。

どのようにに記述すればうまくいくんでしょうか。

Aベストアンサー

> preg_match(/<div class=\"content\">.*<\/div>/s),$target);
> と書いて、divの中身を取り出すことはできたのですが、
> <div class="content">の対の</div>ではなく、html文中にある一番最後の</div>が対象になってしまいました。
* だと最長一致なので
代わりに最短一致の *? を使ってみてはどうでしょう。

(/<div class=\"content\">.*?<\/div>/s

Qpreg_match関数で正規表現の複数指定方法。

./aaaディレクトリ内においてファイル名に、『bbbb』及び『cccc』と言う文字列が含まれるファイルを./eeeディレクトリに移動させるスクリプトを考えております。

以下は『bbbb』のみを拾うようなスクリプトです。
=========
<?PHP
if ($dir = opendir("./aaa")) {
while (($file = readdir($dir)) !== false) {
if(preg_match("/bbbb/",$file)) rename("./aaa/".$file,"./eee/".$file);
}
closedir($dir);
}
?>
=========
上記は前にこちらで質問させていただき、正常に動くことを確認しております。
今回は『bbbb』及び『cccc』が含まれる場合に./eeeディレクトリに移動させることを考えております。
このような場合は『cccc』はどのよう記載すればよいのでしょうか?ご教授の程よろしくお願いいたします。

Aベストアンサー

どちらとも含まれる場合と言う意味ですよね?

単に preg_match をもう一回やればいいのではないかと。

if(preg_match("/bbbb/",$file)) {
if(preg_match("/cccc/",$file)) {
rename("./aaa/".$file,"./eee/".$file);
}
}

Qphpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきま

phpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきません。

<span class="a">あ</span>
<span class="b">い</span>

<span class="a">う</span>
<span class="b">え</span>

<span class="a">お</span>
<span class="b">か</span>

このようなソースから「あいうえお」の部分だけを抜き出したいのです。

以下のようにしているのですが、改行が無い場合は上手く取得できるのですが、
以下のような形で途中に改行が入っている場合、上手く取得できません。

<span class="a">あ
</span>

このような場合でも取得できるようにするにはどうすればよいでしょうか。

$lines = file("http://~~");

foreach ($lines as $line) {

preg_match('/<span class="a">(.*?)<\/span>/ms', $line, $match);

preg_match('/<span class="b">(.*?)<\/span>/ms', $line, $match);

}

msをつけておりますが、
この場合は1行1行ループしているために意味がない状態になるのでしょうか。

どのようにすれば取得させることができるのでしょうか。
お手数をおかけしますが何卒よろしくお願い致します。

phpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきません。

<span class="a">あ</span>
<span class="b">い</span>

<span class="a">う</span>
<span class="b">え</span>

<span class="a">お</span>
<span class="b">か</span>

このようなソースから「あいうえお」の部分だけを抜き出したいのです。

以下のようにしているのですが、改行が無い場合は上手く取得できるのですが、
以下のような形で途中に改行が入っている場合、上手く取得できません。

<span class="a">あ
</span>

このような...続きを読む

Aベストアンサー

結果の用途がわからないので適切な回答かどうか、ですが次のようなのではどうですか。

$content=file_get_contents("xxx.htnl");

$content=preg_replace("/<span[^>]*>|<\/span>|[\r\n]/","",$content);
print $content;
または、
$content=preg_match_all("/<span[^>]*>[\r\n]*(.+)[\r\n]*<\/span>/",$content,$match);
foreach($match[1] as $str){ print $str; }

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Qpreg_match_all関数でaタグの属性を

PHPのpreg_match_all関数でaタグの属性hrefの値だけをすべて取得するにはどうしたらよいでしょう??
正規表現の部分が分かりません。

お願いします。

Aベストアンサー

以下の表現では如何でしょう。
$htmlには、適当なhtmlファイルを入れてください

<?php
$html=file_get_contents('http://okwave.jp/');
$ptn="|<a[^>]href\s?=\s?[\"\']([^\"\']+)[\"\'][^>]*>|i";
preg_match_all($ptn,$html,$out);
print_r($out[1]);
?>

QHTMLのリンクをクリックすることで、phpの内部変数の値を変更させるにはどうしたらよいでしょうか?

$_POST,$_GET以外の方法があるのでしょうか?
$_POST,$_GETで可能でしょうか?
複雑なコードを作らなければいけないでしょうか?

Aベストアンサー

要するに、リンクをクリックして、
リクエストパラメータを自由に変更した上でPOST送信できればいいんですよね?

ではこんな感じでHTMLを書いてはどうでしょう。
<form method="post" action="jiro_no_profile.php">
<input type="hidden" name="parameter_jiro">
<a href="JavaScript:funcPutParam();">jiro</a>
</form>

何をやってるかというと、
単にリンクをクリックすることでJavaScriptのファンクションを呼んでいるだけです。

あとは、ファンクションの中身次第なので、
はっきり言って自由です。何でもできます。
一応、中身もちょっとだけ書いておくと
<script language="javascript">
<!--
function funcPutParam(frm){
frm.parameter_jiro.value = "ここで何でも入れられる。";
frm.submit();
}
-->
</script>
ってな感じですかね。
あとはファンクションの中身次第なので、割愛させていただきます。
JavaScriptでできることなら何でもできるから、例を挙げたらキリがない。

個人的にはあまりお勧めしませんが、とにかく簡単にパラメータだけ変更したいというのであれば

<a href="JavaScript:this.form.parameter_jiro.value="jiro";"this.form.submit();>jiro</a>

の一行でも可能です。
これだと後で変更するときに手がかかる上に共通で使うこともできないので微妙ですが。

要するに、リンクをクリックして、
リクエストパラメータを自由に変更した上でPOST送信できればいいんですよね?

ではこんな感じでHTMLを書いてはどうでしょう。
<form method="post" action="jiro_no_profile.php">
<input type="hidden" name="parameter_jiro">
<a href="JavaScript:funcPutParam();">jiro</a>
</form>

何をやってるかというと、
単にリンクをクリックすることでJavaScriptのファンクションを呼んでいるだけです。

あとは、ファンクションの中身次第なので、
はっきり言って自...続きを読む

Q存在しないページを指定してもTOPページへリダイレクトする方法?

最近ホームページの構成を変更したんですが、検索エンジンから来てルートディレクトリに該当するHTMLファイルがないとpage not foundになってしまいます。
そこで、どんなHTMLファイルにきてもTOPページのindex.htmlに飛ばせる方法ってありますか?
確かhttp://www.directnic.com/ではhttp://www.directnic.com/xxxx とどんなサブディレクトリを指定してもTOPページに行くようになってます。

Aベストアンサー

まず、#2 の方が提示されている様に
.htaccess ファイルを用いて実現できると思います。
(簡単な例示:ErrorDocument 404 /index.html
 DocumentRootから見た絶対パスを記します。)

ただ、ご希望の仕掛けそのままを実現する事は再考をお勧めします。
それはTOPページへ即 飛ばす事です。
閲覧者が当該ページがない事を認識できない可能性があります。
それから質問で提示のサイトも単にTOPページに飛ばしているのではなく、
CGIを用いてエラー情報を編集しているか別のページでTOPページと類似の記述がされている物と思われます。

よって.htaccess ファイルを用いてエラーページを自作してそちらをエラー時に表示する様に指定して、
エラーページにてTOPページと同等の情報を記述しておくかTOPページへのリンクなり自動更新を用意する事をお勧めします。

参考URL:http://www.shtml.jp/htaccess/404.html

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Q正規表現でタグの中身を抜き出し

<script language="php">・・・・</script>
<script language=php>・・・・</script>
<?php ・・・・ ?>
の中身(・・・・の部分)をpreg_matchで抜き出したいと思っています。
preg_match("/<script language=?"php?">(*.)<\/script>/is" ,$p,$matches)

preg_match("/<php? (*.) ?>/is" ,$p,$matches)
としましたがうまくいきません。どのようにしたらいいでしょうか?

Aベストアンサー

たとえば

"/<script language=?"php?">(*.)<\/script>/is"

これって転記のさいの文字化けでしょうか?
ダブルコーテーションのエスケープの前が?になってますが・・・
あと一致は「*.」ではなく「.*」ですね

"/<script language=\"php\">(.*)<\/script>/is"

この辺の凡ミスをなおしてトライアンドエラーで調整してみてから
再度ご質問ください


人気Q&Aランキング