Вернуть часть строки кроме

187
12 октября 2018, 00:10

Всем добрый день! Как правильно составить регулярку, пробовал, но не получается то, что нужно. Есть много текста вида

"rwrwerw rewrwr http://www.site1.com rewrwrw rewrewrwe needword rewrewrewrwe fdsfasfafdsa http://www.site2.com fdsafsafdsafsaf rewrewrew rewrewrewrwe fdsfasfafdsa http://www.site3.com fdsafsafdsafsaf rewrewrew"

Как можно разбить текст разделителем по слову "http://www.site.com" регуляркой с сохранением содержимого регулярки. Или найти/вернуть куски текста "http://www.site.com fdsfsaf fdsfsaf" включающие http://www.site.com в начале, но исключающие следующий http://www.site.com. Следующий http://www.site.com будет со своим последующим текстом. Перепробовал кучу вариантов, но что-то не получается. Такой вариант вроде подходит

~((?:http|https)://.?)(?=[\s]+).?(?=(?:http|https))~is

Но preg_match_all возвращает подстроки с site1 и site2, а блок текста с site3 не возвращает

Answer 1
$str = 'rwrwerw rewrwr http://www.site1.com rewrwrw rewrewrwe needword rewrewrewrwe fdsfasfafdsa http://www.site2.com fdsafsafdsafsaf rewrewrew rewrewrewrwe fdsfasfafdsa http://www.site3.com fdsafsafdsafsaf rewrewrew';
$patt = '~https?://.+?(?=https?|$)~';
preg_match_all($patt, $str, $arr);
var_dump($arr);

Результат:

array (size=1)
  0 => 
    array (size=3)
      0 => string 'http://www.site1.com rewrwrw rewrewrwe needword rewrewrewrwe fdsfasfafdsa ' (length=74)
      1 => string 'http://www.site2.com fdsafsafdsafsaf rewrewrew rewrewrewrwe fdsfasfafdsa ' (length=73)
      2 => string 'http://www.site3.com fdsafsafdsafsaf rewrewrew' (length=46)
Answer 2

Возможно, не самая красивая реализация, но

(https?:\/\/.+?)\s+((?:.(?!https?:\/\/))*)

  • (https?:\/\/.+?) адрес сайта

  • ((?:.(?!https?:\/\/))*) текст после адреса до http или https (исключая последний пробел)

READ ALSO
Перевести массив из одного вида в другой

Перевести массив из одного вида в другой

jQeury плагин собирает файлы (один или несколько) из формы и отправляет на сервер вот в таком виде:

192
Ошибка C2679 («не найден оператор…»)

Ошибка C2679 («не найден оператор…»)

Сохраняю с CSV файла в векторПосле этого нужно вывести 5 случайных людей:

340
Refused исключения для локального хоста

Refused исключения для локального хоста

Пытаюсь освоить pocoНо сбрасывается соединение к локальному хосту

159