Как разбить строку PHP на массив, в котором каждый элемент является либо текстом, либо URL? - PullRequest
0 голосов
/ 26 февраля 2011

Мне нужно разбить массив PHP на массив, содержащий текст и URL-адреса.Например, предполагая

$string = "Hello, my name is http://www.audio.com/1234.mp3/. Today is https://radio.org/weather.wav";

Ожидаемый результат должен быть примерно таким:

$a[0] = "Hello, my name is";
$a[1] = "http://www.audio.com/1234.mp3/";
$a[2] = ". Today is";
$a[3] = "https://radio.org/weather.wav";

Любые предложения?

Заранее спасибо,

Лев

1 Ответ

1 голос
/ 26 февраля 2011

Вы не можете разделить это легко.Но обходной путь - это сопоставить его попарно, используя что-то вроде:

preg_match_all('#(.*?)(https?://\S+(?<![,.]))\K#s', $str, $m,
               PREG_SET_ORDER);
$list = call_user_func_array("array_merge", $m);

. Call_user_func_array - это еще один обходной путь, позволяющий избежать сглаживания массива вручную.Однако этот метод приведет к пустым записям между ними:

Array
(
    [0] => 
    [1] => Hello, my name is 
    [2] => http://www.audio.com/1234.mp3/
    [3] => 
    [4] =>  Today is 
    [5] => https://radio.org/weather.wav
)

Также обратите внимание, что упрощенное регулярное выражение URL уничтожило период.(Используйте точные группы символов вместо вида назад).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...