【问题标题】:remove text and only return the first link in PHP [duplicate]删除文本并仅返回 PHP 中的第一个链接 [重复]
【发布时间】:2020-10-10 08:57:27
【问题描述】:

这是我在stackoverflow中找到的代码,但它有一个问题,有人帮我解决它。

<?php
$string = "Apple iPhone SE (Black, 64 GB)
http://dl.flipkart.com/dl/apple-iphone-se-black-64-gb/p/itm832dd5963a08d?pid=MOBFRFXHCKWDAC4A&cmpid=product.share.pp";

foreach(explode(" ",$string) as $first_occurrence) {
  if (strpos($first_occurrence, 'http') !== false) { break;}
}

echo $first_occurrence;
?>

结果是

GB) http://dl.flipkart.com/dl/apple-iphone-se-black-64-gb/p/itm832dd5963a08d?pid=MOBFRFXHCKWDAC4A&cmpid=product.share.pp

有一个不需要的GB) “...64 GB)”之后有一个换行符,如果我删除它,代码似乎工作正常。但我也想让它与换行符一起工作。

我怎样才能得到准确的输出如下?

http://dl.flipkart.com/dl/apple-iphone-se-black-64-gb/p/itm832dd5963a08d?pid=MOBFRFXHCKWDAC4A&cmpid=product.share.pp

这是另一个更复杂的字符串,

$string = "Samsung Galaxy S20 (Black) https://www.amazon.in/b?node=21021782031&pf_rd_r=Z8266H8XJMQGEZMB0X44&pf_rd_p=00f7186e-02c5-40c7-9f15-9f2d65d70297 afdsfdsf d https://stackoverflow.com/questions/35433139/php-get-only-values-from-an-array and  https://mail.google.com/mail/u/0/#inbox";

结果应该是

https://www.amazon.in/b?node=21021782031&pf_rd_r=Z8266H8XJMQGEZMB0X44&pf_rd_p=00f7186e-02c5-40c7-9f15-9f2d65d70297

【问题讨论】:

    标签: php


    【解决方案1】:

    这可能使用正则表达式更容易实现。 preg_match 将返回字符串中的第一个匹配项:

    $string = "Apple iPhone SE (Black, 64 GB)
    http://dl.flipkart.com/dl/apple-iphone-se-black-64-gb/p/itm832dd5963a08d?pid=MOBFRFXHCKWDAC4A&cmpid=product.share.pp";
    
    preg_match('~https?://[^\s]*~', $string, $matches);
    echo $matches[0];
    

    输出:

    http://dl.flipkart.com/dl/apple-iphone-se-black-64-gb/p/itm832dd5963a08d?pid=MOBFRFXHCKWDAC4A&cmpid=product.share.pp
    

    Demo on 3v4l.org

    【讨论】:

    • 感谢您的回复。但是有一个问题。如果有多个链接,它只检测最后一个链接。我怎样才能检测到第一个链接,总是。添加了有问题的新示例字符串。请检查。
    • @MalavikaP 它适用于该字符串:3v4l.org/WBSdQ
    • 谢谢你,尼克,它有效,之前对我没有用,也许是缓存:-)
    • 我喜欢你的解决方案。它更通用。
    • @MalavikaP 很高兴听到。如果这确实回答了您的问题,请考虑将答案标记为已接受(答案旁边的向上/向下投票箭头下方的复选标记)。见What should I do when someone answers my question?How does accepting an answer work?
    【解决方案2】:

    你也可以这样做:

    $string = "Apple iPhone SE (Black, 64 GB)
    http://dl.flipkart.com/dl/apple-iphone-se-black-64-gb/p/itm832dd5963a08d?pid=MOBFRFXHCKWDAC4A&cmpid=product.share.pp";
    
    foreach(explode("http",$string) as $first_occurrence) {
      if (strpos($first_occurrence, '://') !== false) { break;}
    }
    
    echo $first_occurrence;
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2020-06-22
      相关资源
      最近更新 更多