含まれない文字を正規表現で表す? - PHPプロ!Q&A掲示板

237

  • 0P

含まれない文字を正規表現で表す?

質問日時 / 2006年11月17日 02:57    回答数 / 4件

Questioner:  nicolets  このエントリーをはてなブックマークに追加 

キーワード / 正規表現    preg_replace    preg   

正規表現でちょっと困っております。

htmlの文字列の中から、特定の文字が含まれていないimgタグを書き換えたいのですが、
やりかたがわかりません。
以下のような状態です。

<?php

$html = '<img src="image.php?id=123" /><br />
<img src="sample.png" /><br />
<img src="test.jpg" /><br />
<img src="image.php?id=21" />';

//これでは当然全部拾ってしまいます・・・。
echo preg_replace("/<img src=.*?>/", "<p>no-image<p>", $html);

?>

この場合、image.php以外のimgタグは消してしまいたいのですが、
正規表現をどう書けばいいのか分かりません。

お分かりになる方いらっしゃいましたらお教えください。よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01masami1214こんな感じでどうでしょう。 echo preg_replace("/
┃┗A01-1nicoletsありがとうございます。 無事できました。
┗A02paradogspreg_replace_callback() を使って、コールバック関数
 ┗A02-1nicoletsなるほどです。 こういうやりかたもあるんですね。参

回答一覧

並び替え:

A01 満足
answerermasami1214 [11月17日 10:51]

こんな感じでどうでしょう。

echo preg_replace("/<img src=.*\.(?!php).*?>/i", "<p>no-image<p>", $html);

この意見に回答する

ツリーへ TOPへ

A01-1
replyernicolets [11月22日 23:33]

ありがとうございます。
無事できました。

この意見に回答する

ツリーへ TOPへ

A02 満足
answererparadogs [11月17日 18:34]

preg_replace_callback() を使って、コールバック関数で判定させるという方法もあります。
この例では、src 属性が "image.php?" で始まっているかどうかを確認しています。
strpos() 関数は見つからなかったときに FALSE を返すので、返り値の比較は !== で行い、0 と FALSE の区別をします。
<?php
function check_img_src($match)
{
    if (strpos($match[1], 'image.php?') !== 0) {
        return '<p>no-image<p>';
    }
    return $match[0];
}
$html = '<img src="image.php?id=123" /><br />
<img src="sample.png" /><br />
<img src="test.jpg" /><br />
<img src="image.php?id=21" />';
echo preg_replace_callback('/<img src="(.+?)" \\/>/', 'check_img_src', $html);
?>

この意見に回答する

ツリーへ TOPへ

A02-1
replyernicolets [11月22日 23:34]

なるほどです。
こういうやりかたもあるんですね。参考になりました。
ありがとうございます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)