はじめまして。
現在PHP勉強中の者です。
タイトル通りクラス付けされたHTMLタグ内の文字列を取り出したいのですが、上手くいかず困ってます。
利用サーバーはコアサーバーで環境は下記通りになります。
apache:1.3.37
PHP:5.2.5
スクリプトはUTF-8、HTMLもUTF-8です。
タグは<span class="hoge">文字列</span>
のような感じです。
preg_match_all("/<span class=\"hoge\">(.*)</span><\/em>/", $html, $results);
こんな感じでやってるんですが引っ掛かりません。。。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
途中改行対応なら
preg_match_all("/<span class=\"hoge\">(.*?)<\/span>/s", $html, $results);
でいけます
yambejpさん
ご回答ありがとうございます。
preg_match_all("/<span class=\"hoge\">(.*?)<\/span>/s", $html, $results);
でいけますね。
パターン修飾子にUオプションをつけてやってみてもOKでしたpreg_match_all("/<span class=\"hoge\">(.*)<\/span>/sU", $html, $results);
この場合最小マッチ?を抜いてます。
本家マニュアルhttp://jp.php.net/manual/ja/reference.pcre.patte …
を見てみると、
U (PCRE_UNGREEDY)
この修飾子を設定すると、量指定子の「貪欲さ」が反転します。 つまり、量指定子は、デフォルトで貪欲でなく、 疑問符を後ろに付けてはじめて貪欲になるようになります。 この修飾子は Perl 互換では有りません。 同様の設定は、(?U) 修飾子を パターン内で設定 するか、(.*? のように)量指定子の後に疑問符を 付けるかすることで行うこともできます。
という事でこの二つの方法結局意味はほぼ一緒?
少しずつ正規表現がわかってきて面白くなってきましたがまだまだ覚えることが沢山ありますね。。。
この事案とは別にフォームでURLの正規表現チェックを作ったのですが存在するURLでもマッチングしなかったり・・・
こんな場合は実際URLが存在するかを調べた方がよいのですかね?
PHPの正規表現でオススメの参考書等ありましたらご教授頂けると助かります。
No.2
- 回答日時:
とりあえずtypoの修正と最小マッチを指定すれば少しよくなります。
<?
$html=<<<eof
これは<span class="hoge">文字列1</span>です。これは<span class="hoge">文字列2</span>です。
eof;
preg_match_all("/<span class=\"hoge\">(.*?)<\/span>/", $html, $results);
print_r($results);
?>
yambejpさん
ご回答ありがとうございます。
確かに例文通りの$htmlでは最小マッチ指定でマッチングしますね。
ただ改行(\n)などが入ってる場合はマッチングしてくれないです。
<?php
$html=<<<eof
これは<span class="hoge">文字列1
</span>です。これは<span class="hoge">文字列2</span>です。
eof;
preg_match_all("/<span class=\"hoge\">(.*?)<\/span>/", $html, $results);
print_r($results[1]);
/*
Array
(
[0] => 文字列2
)
*/
?>
パターン修飾子を使用したり色々やってみます。
No.1
- 回答日時:
正規表現のミス??
× preg_match_all("/<span class=\"hoge\">(.*)</span><\/em>/", $html, $results);
○ preg_match_all("/<span class=\"hoge\">(.+)<\/span>/", $html, $results);
phpは門外漢ですが、こう言う事でわ…?
4017Bさん
ゴメンナサイ
ただの記述ミスです。。。
preg_match_all("/<span class=\"hoge\">(.+)<\/span>/", $html, $results);
という事で上記でもマッチング行えません。
ご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- PHP アンドロイドスマホでのphp echoの文字サイズ 1 2023/05/13 15:15
- HTML・CSS 分数が正常に表示されない。 6 2022/05/09 18:53
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで変数から1行目だけを取得...
-
、"(ダブルクォーテーション)...
-
preg_match()の使い方
-
switchの大量分岐の高速化
-
PHPで<a>タグ内からURLと文字を...
-
入力フォームの文字規制
-
PHPメールフォーム URLと半角...
-
Excelで数字のみを2倍3倍にする...
-
preg_matchで Warning: Undefin...
-
preg_match : マッチした位置の...
-
preg_matchと定数について
-
mb_eregのブレースについて(住...
-
正規表現パターンの記入方法に...
-
htmlソースからタグ内のテキス...
-
マルチバイトの文字列の検索方法
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
メッセージボックスで1025文字...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
preg_matchでエラーが出ます。
-
VBAを使ってHTMLソースから特定...
-
Excelで数字のみを2倍3倍にする...
-
PHPで変数から1行目だけを取得...
-
正規表現でシングルクォーテー...
-
、"(ダブルクォーテーション)...
-
正規表現で「0」のみ抽出
-
住所から特定の文字列、数値を...
-
PHPで あるフォルダ内の、特定...
-
phpでhtmlソースを解析し、文字...
-
PHPで<a>タグ内からURLと文字を...
-
正規表現で特定のHTMLタグのク...
-
PHPの正規表現で住所を分けるに...
-
Smartyを使用した、テンプレー...
-
PHPによるIPアドレスマッチ
-
正規表現で、半角大文字と半角...
-
php 正規表現で(ただし○○は除...
-
PHPメールフォーム URLと半角...
-
「半角数字」と「+」を許可する...
-
preg_matchでのマッチが正しく...
おすすめ情報