- ベストアンサー
正規表現でのリンク置換の方法について
- 正規表現を使用して、リンクのパラメータにuid=NULLGWDOCOMOがなければ付加する方法について教えてください。
- PHPのpreg_replaceを使用して、リンクの置換を行いたいです。
- リンクのパラメータにキーが既に存在している場合は無視してください。
- みんなの回答 (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」にします。
その他の回答 (1)
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
$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]); } こんなのはどうでしょうか。。 あまりよろしくなさそうですが。
お礼
ありがとうございます。 単体だったらいいのですが、複数のhrefリンクを一括で置換したかったんです。説明が足りてなくてすみません。
お礼
ご回答ありがとうございます! すばらしいです。できました。 正規表現って奥深いですね。 これからじっくりいただいたサンプルを眺めたいと思います。 ありがとうございました。