使用 php 的函数中的多个正则表达式


Multiple regex in function using php

我想传递包含url的数据,url将被转换为可点击的链接,但问题是当我运行function时,它会重复 3 次,数据处理 3 次。如何获得单个数据输出?我尝试删除串联.=只是=但随后,只处理了最后一个模式。我希望它采用 3 模式,因为我想在www.ivotism.com用户输入时将http添加到href中,它将<a href="http//www.ivotism.com">www.ivotism.com</a>而不是<a href="www.ivotism.com">www.ivotism.com</a>

function linkify($inputText) {
        //URLs starting with http://, https://, or ftp://
        $replacePattern1 = '/('b(https?|ftp):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/i';
        $replacedText .=  preg_replace($replacePattern1, '<a href="$1" target="_blank">$1</a>', $inputText);
        //URLs starting with "www." (without // before it, or it'd re-link the ones done above).
        $replacePattern2 = '/(^|[^'/])(www'.['S]+('b|$))/i';
        $replacedText .=  preg_replace($replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>', $inputText);
        //Change email addresses to mailto:: links.
        $replacePattern3 = '/(([a-zA-Z0-9'-'_'.])+@[a-zA-Z'_]+?('.[a-zA-Z]{2,6})+)/i';
        $replacedText .=  preg_replace($replacePattern3, '<a href="mailto:$1">$1</a>', $inputText);
        return $replacedText;
    }

我运行代码如下所示:

$ab = "<br>1 http://www.ivotism.com <br>2 https://www.ivotism.com/hom.php?u=kira&id=2 <br>3 ftp://www.ivotism.com <br>4 w www.ivotism.com <br>5 info@ivotism.com"; echo 
linkify($ab);

这是我得到的结果:

  1. 1 http://www.ivotism.com
  2. 2 https://www.ivotism.com/hom.php?u=kira&id=2
  3. 3 ftp://www.ivotism.com
  4. 4 www.ivotism.com
  5. 5 info@ivotism.com
  6. 1 http://www.ivotism.com
  7. 2 https://www.ivotism.com/hom.php?u=kira&id=2
  8. 3 ftp://www.ivotism.com
  9. 4 www.ivotism.com
  10. 5 info@ivotism.com
  11. 1 http://www.ivotism.com
  12. 2 https://www.ivotism.com/hom.php?u=kira&id=2
  13. 3 ftp://www.ivotism.com
  14. 4 www.ivotism.com
  15. 5 info@ivotism.com
您可以通过将

正则表达式和替换放入数组中,在一次调用preg_replace中执行所有替换。

$resultText = preg_replace(array($replacePattern1, $replacePattern2, $replacePattern3),
                           array($replaceSub1, $replaceSub2, $replaceSub3),
                           $inputText);