Есть следующая функция:
$currentURI = rtrim($_SERVER['REQUEST_URI'], '/') . '/';
$currentURI = preg_replace('~page=[0-9]+~', '', $currentURI);
Вопрос: как правильно написать следующее регулярное выражение:
$currentURI = preg_replace('~/?page=[0-9]+~', '', $currentURI);
Где /?
- содержание строки, а не синтаксис регулярного выражения? Как правильно это сделать?
Вы можете экранировать символы в регулярных выражениях с помощью обратного слэша: ~/\?page=[0-9]+~
. Таким образом эти символы будут восприниматься как самые обычные символы, а не специальные символы.
Для экранирования спецсимволов в рег.выражениях можно использовать preg_quote
$str = preg_quote("/?page=", '~'); // '/\?page='
$currentURI = preg_replace("~{$str}\d+~", '', $currentURI);
В Вашем случае, вероятно, имеет смысл более конкретно описать то, что Вам нужно.
Например:
$currentURI = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
В качестве альтернативного ответа можно добавить, что в регулярных выражениях PCRE (т. е. в PHP) и Perl поддерживается специальная последовательность \Q…\E, внутри которой игнорируются все метасимволы (разумеется, кроме закрывающего \Е).
Кроме этого, ещё есть возможность преобразования метасимволов в литералы (т.е., в обычный текст) с помощью символьного класса […], но в этом случае есть пара исключений.
Во первых, символ крышка ^, записанный сразу после открывающей квадратной скобки символьного класса [^, так и останется метасимволом, означающим инвертирование последовательности символов текущего символьного класса. Если нужно использовать крышку в качестве литерала, достаточно записать её в любой другой позиции (но не в первой). Например этот шаблон '~[?^]~' будет соответствовать символам ? или ^, а вот этот '~[^?]~' будет соответствовать одному любому символу, кроме символа ?.
Во вторых, символ тире -, записанный между литералами символьного класса, не будет соответствовать символу тире. Для преобразования тире из метасимвола в литерал, нужно записать его вначале или в конце символьного класса. Например такая запись '~[-^?]~' будет соответствовать одному из трёх символов в этой позиции: тире, крышке, или вопросительному знаку.
Что касается прямого слэша / - он не относится к группе метасимволов, и экранирования требует только в том случае, если он является ограничителем шаблона регулярного выражения. Но в таких случаях удобнее заменить символ ограничителя на любой другой, подходящий для текущего шаблона.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите с помощью чего сделаны вкладки csgo и доты на сайте https://csgoigraru и есть у кого примеры готовых? (При нажатии на вкладки меняются лоты)
Имеется задача по парсингу данных из всплывающих окон с сайтаДанные подгружаются после нажатия на эту самую кнопку
Доброй ночи, у меня такой вопросКак реализовать фильтрацию на сайте через запрос к бд? То есть добавляются лоты и вписывается "1" или "2"