Aタグ内の置換 - PHPプロ!Q&A掲示板

2848

  • 100P

Aタグ内の置換

質問日時 / 2010年8月27日 17:16    回答数 / 10件

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

キーワード / 置換   

Aタグ内の置換について教えてください。

<a href="../aaa/bbb/ccc/ddd/ee" target="_blank">

これを、

<a href="http://mydomain.com/ccc/ddd/ee" target="_blank">

に、置換するにはどうしたら上手く行きますか?

上記パターンはファイル内に複数存在します。

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



ツリー一覧

┣A01shimix「../aaa/bbb/」が「http://mydomain.com」のDocument
┃┗A01-1taroujirou返信ありがとうございます。 該当ファイルは外部か
┃ ┗A01-1-1shimix#str_replaceの説明は読まれましたでしょうか? >
┃  ┗A01-1-1-1taroujirou返信ありがとうございます。 上記のような処理をA
┃   ┗A01-1-1-1-1shimixあぁ「a要素内のみ」ということですね。そうなるとpre
┃    ┗A01-1-1-1-1-1taroujirou> (というか質問は「正規表現の書き方」?)。 おっ
┃     ┗A01-1-1-1-1-1-1shimix>面倒というか上手く出来なくて、ここに書き込みさせ
┃      ┗A01-1-1-1-1-1-1-1taroujirouアドバイスいただきました内容で 無事解決いたしまし
┗A02magicflute2これは、手元にあるソースを置換えたいという事でしょ
 ┗A02-1taroujirou返信ありがとうございます。 該当ファイルは外部

回答一覧

並び替え:

A01
answerershimix [8月27日 20:34]

「../aaa/bbb/」が「http://mydomain.com」のDocumentRootになっているということでしょうか?ひとつの置換パターンだけであれば、置換対象がいくつ存在していてもstr_replace(もしくはstr_ireplace)でまとめて置換出来ます。

  http://jp2.php.net/manual/ja/function.str-replace.php

ただし置換パターン(置換前の文字列と置換後の文字列のパターン)が複数あるのなら、preg_replaceを使った方が楽だとは思います。

  http://jp2.php.net/manual/ja/function.preg-replace.php
  ($pattern,$replacementを配列で与える)

この意見に回答する

ツリーへ TOPへ

A01-1
replyertaroujirou [8月27日 22:23]

返信ありがとうございます。

該当ファイルは外部から取得した物を対象としてます。

置換パターンは複数存在してて、似たような対象外なパターンも存在します。

../aaa/bbb/ccc/ が固定部分で ddd/ee が変動部分となります。

../aaa/bbb/ccc/ddd/ee の形式であり、
かつ ../aaa/bbb/ccc/ の固定部分が完全合致している物のみを対象に置換したいです。

その際には、 ../aaa/bbb/ccc/ の固定部分を任意指定ドメインに置換しつつ
ddd/ee の変動部分は、そのままの形で結合したいのです。

アドバイスお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [8月28日 15:01]

str_replaceの説明は読まれましたでしょうか?

>置換パターンは複数存在して

ということであれば
  1. $pattern = array(
  2.     '../aaa/bbb/ccc/', 
  3.     '../aaa/bbb/ddd/'
  4.     );
  5. $replacement = array(
  6.     'http://example.com/ccc/',
  7.     'http://example.com/ddd/'
  8.     );
  9. $array = str_replace($pattern, $replacement, file('templete.html'));
  10.  
  11. // デバッグ用出力
  12. header('Content-type: text/plain');
  13. print_r($array);
と書いてはどうでしょう?というのが前のレスで書いたことなのですが。

とりあえずfile()で読んでいますが、第三引数は配列/文字列のどちらでもかまいません。file_get_contents()で読めば
  1. $str = str_replace($pattern, $replacement, file_get_contents('templete.html'));
として、str_replaceの結果が文字列になるだけの違いです。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyertaroujirou [8月29日 08:45]

返信ありがとうございます。

上記のような処理をAタグ内のみに適用しようとすると
パターンマッチのさせ方が分らず上手く出来なくいかないです。

どうやって正規表現を記載するばパターンマッチさせれて、
かつ今回のように特に変動個所のみを指定ドメインに結合でますか?

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1
replyershimix [8月29日 11:50]

あぁ「a要素内のみ」ということですね。そうなるとpreg_replace()で正規表現を使うことになります(というか質問は「正規表現の書き方」?)。

でも、「a要素内のみ」じゃなくて「href属性のみ」にすれば(href="を$patternと$replacementに含んでしまえば)それでもいいように思いますけどね。

#引用符を2種類(単引用符/二重引用符)使っていると面倒ですが・・

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1
replyertaroujirou [8月30日 09:13]

> (というか質問は「正規表現の書き方」?)。
おっしゃる通りです、わかり難い書き方で失礼しました。


> #引用符を2種類(単引用符/二重引用符)使っていると面倒ですが・・ 
面倒というか上手く出来なくて、ここに書き込みさせていただきました。


よろしくおねがいします。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1-1 満足
replyershimix [8月30日 10:35]

>面倒というか上手く出来なくて、ここに書き込みさせていただきました。

いや、二種類だけなら、両方のパターン(href="とhref=')を置換文字列(置換元・置換後)に記述しておけばいいだけです。

  1. // パターン定義ここから
  2. $pattern1 = array(
  3.     'href="../aaa/bbb/ccc/', 
  4.     'href="../aaa/bbb/ddd/'
  5.     );
  6. $pattern2 = str_replace('"', '\'', $pattern1);
  7. $replacement1 = array(
  8.     'href="http://example.com/ccc/',
  9.     'href="http://example.com/ddd/'
  10.     );
  11. $replacement2 = str_replace('"', '\'', $replacement1);
  12. // パターン定義ここまで
  13.   :
  14.   :
  15.   :
  16. $str = str_ireplace($pattern1, $replacement1, file_get_contents('templete.html'));
  17. $str = str_ireplace($pattern2, $replacement2, $str);

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1-1-1
replyertaroujirou [8月30日 11:04]

アドバイスいただきました内容で
無事解決いたしました。
ありがとう御座いました

この意見に回答する

ツリーへ TOPへ

A02
answerermagicflute2 [8月27日 20:57]

これは、手元にあるソースを置換えたいという事でしょうか。
ならば、テキストエディタ上で置換えする訳にはいかないのでしょうか。

この意見に回答する

ツリーへ TOPへ

A02-1
replyertaroujirou [8月27日 22:26]

返信ありがとうございます。


該当ファイルは外部から取得した物を対象としてます。
常に動的に処理させたいのエディタではなく、
スクリプトにて処理したいと思ってます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
include されたファイルの変数
 このエントリーをはてなブックマークに追加 
A
出来ます。include(require)は、その部分に読み込むファイルの内容を展開したのと同義です。エディタでファイル読み込み(あるいはコピペ)した状態と同じだと考えていいです。 #defineや変数定義だけの共通フ...

>>続きを読む

shimix様、いつもわかりやすい説明をありがとうございます。 「includeはエディタでコピペした状態と同じ」 この表現、私も授業で使わせていただきたいと思います。

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