• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現での置換について)

正規表現でのリンク置換の方法について

このQ&Aのポイント
  • 正規表現を使用して、リンクのパラメータにuid=NULLGWDOCOMOがなければ付加する方法について教えてください。
  • PHPのpreg_replaceを使用して、リンクの置換を行いたいです。
  • リンクのパラメータにキーが既に存在している場合は無視してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

$str = preg_replace('/(<a[^>]*?href="[^"]*?)(")/', '$1&uid=NULLGWDOCOMO$2', $str); $str = preg_replace('/(<a[^>]*?href="[^"]*?uid=[^"]*)(&uid=NULLGWDOCOMO)(")/', '$1$3', $str); $str = preg_replace('/(<a[^>]*?href="[^"?]*?)&(uid=[^"]*")/', '$1?$2', $str); でどうでしょうか。 1回目の置換で、「&uid=NULLGWDOCOMO」を付け、 2回目の置換で、uidがダブっていたら消し、 3回目の置換で、他に引数が無い場合は付加する引数を「?uid=NULLGWDOCOMO」にします。

seiroku55
質問者

お礼

ご回答ありがとうございます! すばらしいです。できました。 正規表現って奥深いですね。 これからじっくりいただいたサンプルを眺めたいと思います。 ありがとうございました。

その他の回答 (1)

回答No.1

$string = preg_replace_callback("#(<a[^<]*?href=)[\"\']?([^\"\'\?]*)\??([^\"\']*)[\"\']?([^>]*?>)#i", 'cb', $string); function cb($m) { $a = split("&", $m[3]); $_arr = array(); foreach ($a as $_v) { if (strpos($_v, 'NULLGWDOCOMO') === FALSE) { $_arr[] = $_v; } } $_arr[] = 'uid=NULLGWDOCOMO'; $m[3] = '?' . join("&", $_arr); return sprintf("%s\"%s%s\"%s", $m[1], $m[2], $m[3], $m[4]); } こんなのはどうでしょうか。。 あまりよろしくなさそうですが。

seiroku55
質問者

お礼

ありがとうございます。 単体だったらいいのですが、複数のhrefリンクを一括で置換したかったんです。説明が足りてなくてすみません。

関連するQ&A

専門家に質問してみよう