Есть ли в строке параметров сессия (PHPSESSID):

print $_SERVER['REQUEST_URI'].'<br>';
if (preg_match("/=([a-f0-9]{32})&/i", $_SERVER['REQUEST_URI'].'&')){
 print 'Да';
 // удалить сессию из строки параметров
 //print str_replace('&&','&',str_replace('?&','?',preg_replace("/&*sid=([a-f0-9]{32})&*/i", '&', $_SERVER['REQUEST_URI'])));
 }
else print 'Нет';

Добавлено: 08 Августа 2018 08:27:55 Добавил: Андрей Ковальчук

Исключение GET-запроса из URL.

Иногда нужно получить URL без GET-параметров (например, при перенаправлении запросов с помощью mod_rewrite зачастую требуется проводить анализ URL, чтобы сформировать ответ клиенту; нередко для анализа нужна только статическая часть URL, а часть, где передается GET-запрос, не нужна и даже мешает).

// удаление GET-параметров из URL
$str = preg_replace('/^(.+?)(\?.*?)?(#.*)?$/', '$1$3', $url);

Добавлено: 08 Августа 2018 08:27:02 Добавил: Андрей Ковальчук

Получение строки GET-запроса.

Для начала поставим самую простую задачу - получить часть URL, содержащую GET-параметры.

function ggp($url) { // get GET-parameters string
    preg_match('/^(.+?)(\?.*?)?(#.*)?$/', $url, $matches);
    $gp = (isset($matches[2])) ? $matches[2] : '';
    return $gp;
}

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

Добавлено: 08 Августа 2018 08:26:36 Добавил: Андрей Ковальчук

preg_replace_callback()

// Пользовательская функция. Будет вызываться для каждого
// совпадения с регулярным выражением.
function toUpper($pockets) {
  return $pockets[1].strtoupper($pockets[2]).$pockets[3];
}
$str = '<hTmL><bOdY bgcolor="white">Three captains, one ship.</bOdY></html>';
$str = preg_replace_callback('{(</?)(\w+)(.*?>)}s', "toUpper", $str);
echo htmlspecialchars($str);

Добавлено: 08 Августа 2018 08:26:12 Добавил: Андрей Ковальчук

Различные флаги preg_match_all()

Header("Content-type: text/plain");
$flags = array(
  "PREG_PATTERN_ORDER",
  "PREG_SET_ORDER",
  "PREG_SET_ORDER|PREG_OFFSET_CAPTURE",
);
$re   = '|<(\w+).*?>(.*?)</\1>|s';
$text = "<b>текст</b>  и еще <i>другой текст</i>";
echo "Строка: $text\n";
echo "Выражение: $re\n\n";
foreach ($flags as $name) {
  preg_match_all($re, $text, $pockets, eval("return $name;"));
  echo "Флаг $name:\n";
  print_r($pockets);
  echo "\n";
}

Добавлено: 08 Августа 2018 08:25:42 Добавил: Андрей Ковальчук

Сравнение &quot;жадных&quot; и &quot;ленивых&quot; квантификаторов

$str = '[b]жирный текст [b]а тут - еще жирнее
вернулись[/b]';
$to = '<b>$1</b>';
$re1 = '|\[b\] (.*) \[/b\]|ixs';
$re2 = '|\[b\] (.*?) \[/b\]|ixs';
$result = preg_replace($re1, $to, $str);
echo "Жадная версия: ".htmlspecialchars($result)."<br />";
$result = preg_replace($re2, $to, $str);
echo "Ленивая версия: ".htmlspecialchars($result)."<br />";[/PHP]

Добавлено: 08 Августа 2018 08:23:15 Добавил: Андрей Ковальчук

Простейший разбор даты.

$str = " 15-16/2000       "; // к примеру
$re = '{
  ^\s*(                  # начало строки
    (\d+)                  # день
      \s* [[:punct:]] \s*  # разделитель
    (\d+)                  # месяц
      \s* [[:punct:]] \s*  # разделитель
    (\d+)                  # год
  )\s*$                  # конец строки
}xs';
// Разбиваем строку на куски при помощи preg_match().
preg_match($re, $str, $pockets) or die("Not a date: $str");
// Теперь разбираемся с карманами.
echo "Дата без пробелов: '$pockets[1]' <br>";
echo "День: $pockets[2] <br>";
echo "Месяц: $pockets[3] <br>";
echo "Год: $pockets[4] <br>";

Добавлено: 08 Августа 2018 08:21:28 Добавил: Андрей Ковальчук

Превращение E-mail в HTML-ссылку.

$text = "Привет от somebody@mail.ru, а также от other@mail.ru!";
$html = preg_replace(
  '/(\S+)@([a-z0-9.]+)/is',     // найти все E-mail
  '<a href="mailto:$0">$0</a>', // заменить их по шаблону
  $text                         // искать в $text
);
echo $html;

Добавлено: 08 Августа 2018 08:21:04 Добавил: Андрей Ковальчук