![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
被リンクの一覧を抜き出す正規表現が分かりません。
特定のページにアクセスして、そのページに含まれる被リンクの一覧を表示するphpを作成しています。
例えば、以下の「なんとか1」や「なんとか2」を抜き出したいです。
<a href=http://c.oshiete/>なんとか1</a>
<a href=http://goo.com/>なんとか2</a>
<?php
$fname=htmlspecialchars($_POST['word']);
$file1=@fopen($fname,'r') or exit('アクセスが出来ませんでした。');
$data='';
while(feof($file1)==false){
$data.=fgets($file1);
}
fclose($file1);
preg_match_all('?ここが分かりません。',$data,$result);
if(count($result[0]==0)) exit('URLは含まれていません');
echo ('<table border=1>');
echo ('<tr><th>'.$fname.'に含まれるURL</th></tr>');
foreach($result[0] as $obj){
echo '<tr><td>'.htmlspecialchars($obj).'</td></tr>';
}
echo '</table>';
?>
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
説明を入れておけばよかったですね。
preg_match_allでは正規表現に()を入れておくとそこに該当する部分も一緒に取得できます。
"/<a .*?>(.*?)<\/a>/i"ですので何とかにあたるのは(.*?)の部分です。
$result[0]に正規表現全体に該当する部分(ここでは<a href=...>なんとか</a>)が
$relust[1]に(.*?)にあたる部分が抜き出されます。
ですので欲しい部分はすでに取り出されております。
その後の
foreach($result[1] as $obj){
echo '<tr><td>'.htmlspecialchars($obj).'</td></tr>';
}
で、$result[1]をforeachでまわしているので被リンクが出力されているわけです。
ちなみに()の数を増やすとその分だけ$resultにセットされます。
例)
<a href=http://c.oshiete/>なんとか1</a>
<a href=http://goo.com/>なんとか2</a>
に対して$match="/<a href=(.*?)/>(.*?)(<\/a>)/i"という感じでマッチングすると
$result[0][0]=<a href=http://c.oshiete/>なんとか1</a>
$result[0][1]=<a href=http://goo.com/>なんとか2</a>
$result[1][0]=http://c.oshiete
$result[1][1]=http://goo.com
$result[2][0]=なんとか1
$result[2][1]=なんとか2
$result[3][0]=</a>
$result[3][1]=</a>
となります。
お返事を頂きありがとうございます。
なんとか1やなんとか2のみを、無事取り出すことができました。
duronさん、ありがとうございました。
No.1
- 回答日時:
タグの閉じ忘れ等を考慮しないのでよければ↓のような感じで
<?php
// $fname=htmlspecialchars($_POST['word']);
$fname=htmlspecialchars("http://www.yahoo.co.jp/");
$file1=@fopen($fname,'r') or exit('アクセスが出来ませんでした。');
$data='';
while(feof($file1)==false){
$data.=fgets($file1);
}
$match="/<a .*?>(.*?)<\/a>/i";
preg_match_all($match,$data,$result);
if(count($result[0])==0) exit('URLは含まれていません');
echo ('<table border=1>');
echo ('<tr><th>'.$fname.'に含まれるURL</th></tr>');
foreach($result[1] as $obj){
echo '<tr><td>'.htmlspecialchars($obj).'</td></tr>';
}
echo '</table>';
?>
お返事を頂きありがとうございます。
無事に被リンクのみが表示できました。
できたら、「なんとか1」や「なんとか2」のみを取り出したいのですが、
正規表現では難しいでしょうか?
取り出したあとに、replaceを使って<a>タグを消去する方法に
なるのでしょうか??
foreach($result[0] as $obj){
$obj2=preg_replace('/<a.*?>/i','',$obj);
$obj3=preg_replace('/<\/a>/','',$obj2);
echo '<tr><td>'.htmlspecialchars($obj3).'</td></tr>';
}
できましたら、こちらにもご回答を頂けると助かります。
宜しくお願い致します。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルでpingの結果を...
-
Dosブロンプトでtabを出力したい
-
phpでcookieがうまく保存されない
-
ゼロとNULLを区別して number_f...
-
switch()文で値の大小比較
-
csvの特定のキーワードを指定し...
-
syntax error, unexpected 'ech...
-
vbsのif文で複数条件の判定
-
動的なPHPを静的なhtmlページに...
-
hiddenを使っているのに、表が...
-
DBのハッシュ化したパスワード...
-
WIN FIXER2005
-
連想配列からテーブルを作成す...
-
PHP 四則演算について
-
echoの直後に変数(文字列では...
-
Windowsのsetコマンドでの小数...
-
pear のAUTHでsetAuthDataで登...
-
PHPで3番目に大きい数を求める
-
PHPとCSSを使用して九九...
-
openssl関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
findstrのerrorlevel
-
syntax error, unexpected 'ech...
-
小数点以下0の非表示
-
バッチファイルで、全てのウィ...
-
オブジェクトの中身の判定(PHP)
-
PHPで訪問回数を表示するカウン...
-
ゼロとNULLを区別して number_f...
-
bashの関数の引数にスペースが...
-
ナベアツプログラム(3の倍数...
-
変数の受け渡しによる画像の表示
-
PHP一覧表示した項目にリンクを...
-
Windowsのsetコマンドでの小数...
-
Parse error というエラーの対...
-
pdftkを使った処理をバッチファ...
-
DBのハッシュ化したパスワード...
おすすめ情報