Несколько регулярных выражений в функции с использованием php

0

Я хотел передать данные, содержащие url внутри него, и url будет преобразован в ссылки, доступные по клику, но проблема в том, что когда я запускаю эту function, она повторяется 3 раза, а данные обрабатываются 3 раза. Как я могу получить один вывод данных? Я попытался удалить конкатенацию .= To just = но затем обрабатывается только последний шаблон. Я хочу это в 3 www.ivotism.com, потому что я хочу добавить http в href когда пользовательский вход - www.ivotism.com, он будет <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 [email protected]"; 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 [email protected]
  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 [email protected]
  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 [email protected]
  • 2
    Вы используете $inputText в качестве ввода каждый раз. Вам нужно использовать результат предыдущей замены.
  • 0
    Вы имеете в виду, что я должен использовать $replaceText в $replaceText 2 и 3?
Теги:
function

1 ответ

1
Лучший ответ

Вы можете выполнять все замены в одном вызове preg_replace, помещая регулярные выражения и замены в массивы.

$resultText = preg_replace(array($replacePattern1, $replacePattern2, $replacePattern3),
                           array($replaceSub1, $replaceSub2, $replaceSub3),
                           $inputText);
  • 0
    Это здорово, и нет проблем с переопределением функции. все нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню