人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの正規表現による置換の質問です。
src="hoge"
href="hoge"
のパターンを探し
src="foo"
href="foo"
に置換する書き方(関数も含めた実行ステートメントでお願いします)を教えてください。
シングルクォートでも対応できるようにお願いします。


●質問者: P-mako
●カテゴリ:コンピュータ インターネット
✍キーワード:hoge href PHP SRC クォート
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● rouge_2008
●60ポイント ベストアンサー

以下で大丈夫だと思いますが、希望通りの動作になったでしょうか?

$text = "<div>\r\n<a href='test-hoge.html' target='_blank'>リンク1</a><br>\r\n<a href=\"hoge.html\">リンク2</a><br>\r\n";
$text .= "<a href='abchoge-test.html' target='_blank'><img src=\"/images/hoge.gif\">テスト画像1</a><br>\r\n</div>\r\n";

$pattern = "/((?:src|href)=(?:\"|'))(.*?)hoge(.*?)(\"|')/";

$text = preg_replace($pattern, "$1$2foo$3$4", $text);

echo $text;

hogeはファイル名だと思いますので、前後に文字があっても大丈夫なようにしてみました。

上記で希望通りの動作にならない場合は、返信で状況を詳しく教えてください。

※コメント欄を開けて置いてくださった方がフォローしやすいです。

http://php.net/manual/ja/function.preg-replace.php

◎質問者からの返答

早速のご回答ありがとうございました&真意を汲み取っていただき、ありがとうございました。

訂正します。問題なく動作しました。ありがとうございました。


2 ● hikawa244
●10ポイント

「PHP」で「正規表現」だと、プロの方ですよね。

こういうところで質問する前に、

・まず、きちんと基礎を学ぶ。

・そういう仕事がきたら、うんざりしながら、あれこれ試す。

が、正解です。

人に頼っていては、スキルは身につきません。

「会社に火をつけてやろうか」くらいの思いをすることで、プログラマはスキルアップできるのです。

(もちろん、実際に火をつけたらダメよ。(^^))


ただ、

>2010-04-09 02:31:18

に、レスをつけているっていうのは、相当、切羽詰まっているのかな?

ということで、こんな感じでは如何?

<html>

<head>

<title>rex test</title>

<meta http-equiv="content-type" content="text/html; charset=utf-8">

</head>

function foo($doc, $a, $b)

{

return preg_replace(array("/src=[\"'][^\"*][\"']{[^Hh]*}href=[\"'][^\"'*][\"']/i")

, array("src=\"" . $a . "\"\\1href=\"" . $b . "\"")

, $doc);

}

?>

<body>

echo foo('', '1', '2');

echo foo("", '1', '2');

?>

</body>

</html>

ちなみに、これだと、src と href の順番が逆の場合、ヒットしません。

また、クォーテーションのシングルとダブルの判定が、必ずしも厳密ではありません。

まぁ、順番が逆の場合は、入れ替えたパターンでもう一度やれば済みます。

シングルとダブルは、ソースがちゃんとしているという前提で…

でも、これでうまくいかない場合、「正規表現」が理解できていないと、手助けにならないかも…


「正規表現」は、普通によく出ます。

正直、少し、とっつきにくいです。

でも、きちんと学べば、あなたにとって、強力な助っ人になるはずです。

困ったことに、覚えても、カットアンドトライになる、面倒臭い奴ですけどね。

これを機会に、勉強してみてください。

あなたの問題が解決しますように…


※回答にURLが必須です

って、出てしまいました。

どうすれば、いいんだろう?

とりあえず、http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%B...とか?

◎質問者からの返答

アドバイス、真意の汲み取りありがとうございます。

正規表現の基礎的なところは多少は理解しています。

PHP(preg系はPerlですかね)以外にも、秀丸やDreamWeaverの正規表現も多少は使ったこともあり、

実行系によって微妙な差異があること、だけではないんですが、正確に「書けるようになる」ことは

その頻度やレベルからあまり重要ではありません。ぎりぎり「読めれば良い」程度で、基礎的といって

いるのは、そんなに長く複雑でない正規表現でなければ読めるんです。英語と近いですね。

とくに今回ものは、比較的、頻出すると思われる内容なので、この手のものは、知っている人に

聞くのが手っ取り早いです。

もちろんGoogleで検索してみたのですが、見落としているのか、ワードが適当でなかったのか、

あまり相応しいものが見つからなかったので質問したんですけどね。

何も詳しい説明をつけずに、ぽーんと乱暴な質問でした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ