src="hoge"
href="hoge"
のパターンを探し
src="foo"
href="foo"
に置換する書き方(関数も含めた実行ステートメントでお願いします)を教えてください。
シングルクォートでも対応できるようにお願いします。
以下で大丈夫だと思いますが、希望通りの動作になったでしょうか?
$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はファイル名だと思いますので、前後に文字があっても大丈夫なようにしてみました。
上記で希望通りの動作にならない場合は、返信で状況を詳しく教えてください。
※コメント欄を開けて置いてくださった方がフォローしやすいです。
以下で大丈夫だと思いますが、希望通りの動作になったでしょうか?
$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はファイル名だと思いますので、前後に文字があっても大丈夫なようにしてみました。
上記で希望通りの動作にならない場合は、返信で状況を詳しく教えてください。
※コメント欄を開けて置いてくださった方がフォローしやすいです。
早速のご回答ありがとうございました&真意を汲み取っていただき、ありがとうございました。
訂正します。問題なく動作しました。ありがとうございました。
「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で検索してみたのですが、見落としているのか、ワードが適当でなかったのか、
あまり相応しいものが見つからなかったので質問したんですけどね。
何も詳しい説明をつけずに、ぽーんと乱暴な質問でした。
早速のご回答ありがとうございました&真意を汲み取っていただき、ありがとうございました。
訂正します。問題なく動作しました。ありがとうございました。