【问题标题】:Preg replace URL - attach affiliate IDPreg 替换 URL - 附加会员 ID
【发布时间】:2015-03-19 22:01:51
【问题描述】:

Ebay 链接应替换为附属 ID。因此我使用 preg 替换。它在 $message 字符串中只有 1 个 URL 时有效。当 $message 字符串中有超过 1 个 URL 时,只有第一个 URL 有效。其他 URL 不会被替换。

$message = preg_replace('/<a(.*)href="(http:\/\/(cgi|www).ebay.*(=|\/)([0-9]{12,})[=\?\/]?[^"]*)"[^<]*<\/a>/Uis', '<a onclick="window.open(this.href); return false;" href="http://rover.ebay.com/rover/1/707-53477-19255-0/1?ff3=4&pub=3454345446&toolid=10001&campid=234342343&customid=&mpre=$2" title="Ebay Article: $5" target="_blank">http://www.ebay.com/itm/$5</a><img style="text-decoration:none;border:0;padding:0;margin:0;" src="http://rover.ebay.com/roverimp/1/707-53477-19255-0/1?ff3=4&pub=3454345446&toolid=10043&campid=345445454&customid=&mpt=[CACHEBUSTER]">', $message);

我发现,当我改变了

{12,}

到

{0,}

所有的 URL 都被替换了,但是 $5 是空的。但我在 URL 中需要这 5 美元。

有人有想法吗?

谢谢你

【问题讨论】:

    标签: php regex html-parsing preg-replace


    【解决方案1】:

    当您使用等于* 的{0,} 时,您将这个整数设为可选,而前面的贪婪子表达式 - .* - 会占用大部分输入字符串。

    使用+(或{1,})。

    【讨论】:

    • 非常感谢您的快速回复。当我使用“+”时,不会替换任何 URL。当我使用 {1,} 时,第一个和最后一个被替换,而不是中间的那个。感谢您提供更多帮助。
    • 如需更多帮助,请提供具有所需输出的示例输入字符串。
    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 2017-01-05
    • 2012-03-27
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多