Преобразование preg_replace в preg_replace_callback в массиве - PullRequest
0 голосов
/ 05 мая 2018

У меня есть базовый скрипт в движке чата, который ищет URL-адреса и делает их кликабельными для пользователей. Я использую php 5.6, поэтому я получаю предупреждение о preg_replace и использую функцию обратного вызова. Несмотря на то, что я могу делать это обычно с помощью функции, я создаю этот возврат с использованием довольно сложного массива и возвращаю его в другой сложный массив.

Вот код, который я сейчас использую:

    return preg_replace(
        array(
            '/(?(?=<a[^>]*>.+<\/a>)(?:<a[^>]*>.+<\/a>)|([^="\']?)((?:https?|ftp|bf2|):\/\/[^<> \n\r]+))/iex',
            '/<a([^>]*)target="?[^"\']+"?/i',
            '/<a([^>]+)>/i',
            '/(^|\s)(www.[^<> \n\r]+)/iex', 
            '/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)(\\.[A-Za-z0-9-]+)*)/iex'
        ),
        array(
            "stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a> <i class=\"fas fa-external-link-alt\"></i>\\3':'\\0'))",
            '<a\\1',
            '<a\\1 target="_blank">',
            "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a> <i class=\"fas fa-external-link-alt\"></i>\\3':'\\0'))",
            "stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
        ),
        $text
    );

У меня вопрос, как я могу переписать свой второй аргумент, чтобы он работал, используя preg_replace_callback, поскольку я использую массивы. Это IS похоже на некоторые другие вопросы, но они не возвращают свои значения или сравнивают их с помощью массива, и я попытался написать функцию возврата, аналогичную тому, что используют другие ответы, и она просто не работает , Любая помощь с этим будет оценена!

...