Top.Mail.Ru
Ответы

PHP Правильно распарсить строку ?

Надо вытащить insale из двух разных вид строк как сделать это правильно без такого кода по нормальному если строка содержить адрес profile или id в соответсвие с этим выполнить код
$url= 'world/id/insael/';
$findme = 'world/profile/insael/"
$pos = strpos($url, $findme);

if ($pos === false) {
echo "Строка не найдена";
}
else
{
$url = explode("world/id/",$url);
echo "Строка найдена разделяем и выводи то что идет после world/id/";

echo "Привет " . $url[1];
//Выводит ПРивет insael/
}

По дате
По рейтингу
Аватар пользователя
Мудрец
7мес
1234567891011121314
 $url1 = 'world/id/insael/'; 
$url2 = 'world/profile/insael/'; 
 
// Определяем шаблон для извлечения "insael" 
$pattern = '#world/(id|profile)/([^/]+)/#'; 
 
if (preg_match($pattern, $url1, $matches)) { 
    // $matches[2] содержит то, что мы ищем 
    echo "Привет " . $matches[2]; 
} elseif (preg_match($pattern, $url2, $matches)) { 
    echo "Привет " . $matches[2]; 
} else { 
    echo "Строка не соответствует шаблону"; 
}  

Объяснение:
Шаблон регулярного выражения:

# — это разделитель регулярного выражения.
world/ — ищем строку, начинающуюся с world/.
(id|profile) — либо id, либо profile.
/([^/]+)/ — захватываем всё, что идёт после id/ или profile/, до следующего /.
preg_match:

Функция ищет совпадение строки с шаблоном.
Если совпадение найдено, то результат захватывается в массив $matches, где:
$matches[0] — это полное совпадение.
$matches[1] — это id или profile.
$matches[2] — это insael.
Проверка нескольких строк:

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

Аватар пользователя
Просветленный
7мес
1234567891011121314151617181920212223242526272829303132333435
 <?php 
 
function extractInsale($url) { 
  // Регулярное выражение для поиска "insael" после "world/id/" или "world/profile/" 
  //  \b - граница слова, чтобы избежать совпадений внутри других слов 
  //  (?:...) - неговорящая группа (не создает отдельный захват) 
  //  .+? - один или более символов (жадный), но как можно меньше 
  if (preg_match('/\b(?:world\/id\/|world\/profile\/)(.+?insael)\b/i', $url, $matches)) { 
    //  $matches[1] содержит  "insael" или часть строки перед insael 
    return $matches[1]; 
  } else { 
    return null; // Или выбросить исключение, если insael не найден 
  } 
} 
 
 
$urls = [ 
  'world/id/insael/', 
  'world/profile/insael/', 
  'other/world/id/insael/', // тест на частичное совпадение 
  'world/id/something/insael/', // тест на более длинную строку 
  'world/profile/something_else/insael', // тест на более длинную строку 
  'no_match', 
]; 
 
foreach ($urls as $url) { 
  $result = extractInsale($url); 
  if ($result !== null) { 
    echo "URL: " . $url . ", Insale: " . $result . "\n"; 
  } else { 
    echo "URL: " . $url . ", Insale NOT FOUND\n"; 
  } 
} 
 
?> 
Аватар пользователя
Ученик
7мес

Незн