phpの正規表現について教えてください。

いまいち正規表現が理解出来ていないので今回を良いきっかけに出来ればと考えています。

試したいのは
<font color="#f9910a">□</font><a href="index.php?id=○○○">hogehoge</a>
と言うHTMLコードが入った変数があり

それを
<font color="#f9910a">□</font><a href="abc/index.php?id=○○○">hogehoge</a>

<font color="#f9910a">□</font><a href="index.php?id=○○○">abcd</a>
に変換したり、もしくは条件にあったものを削除する事が行えればと考えています。

○○○の部分はデータベースから出力されるIDで、この部分は一致しません(将来桁も増えて行きます)。

初心者の質問なので見当違いがあるかもしれませんが、どうぞよろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/06/28 18:57:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント60pt

"□" と "○○○" の部分が任意の文字列(日本語文字を含む)になるという前提で回答します。以下のスクリプトを UTF-8 で保存してください。

<?php
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
$instr = '<font color="#f9910a">□</font><a href="index.php?id=○○○">hogehoge</a>';

$pat1 = '/<a href=\"index\.php\?id=/u';
$rep1 = '<a href="abc/index.php?id=';
$outstr1 = preg_replace($pat1, $rep1, $instr);
echo '[1] ' . htmlspecialchars($outstr1) . "<br />\n";

$pat2 = '/<a href=\"index\.php\?id=([^\"]*)\">hogehoge<\/a>/u';
$rep2 = '<a href="index.php\?id=$1">abc</a>';
$outstr2 = preg_replace($pat2, $rep2, $instr);
echo '[2] ' . htmlspecialchars($outstr2) . "<br />\n";
?>

正規表現パターンは $pat1, $pat2 の2つで、各々の置換パターンが $rep1, $rep2 になります。

下記のサイトを参考にしてください。

id:t-2-o

■は普通にHTMLに■と入力したというものでした。

○○○は数字になります。

hogehogeの部分が日本語になる可能性があります。

これらを踏まえてもスクリプトの内容は変わらないのでしょうか。

2008/06/28 18:20:21
  • id:t-2-o
    スクリプトを実際に動作しているプログラムに沿う形で埋め込んでみたところ、処理出来ました。
    これを良い機会に正規表現を勉強してみます。
    本当に有り難うございました!!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません