регулярное выражение для извлечения значения параметра строки запроса из URL в PHP

#php #preg-match

#php #preg-match

Вопрос:

Мне нужно извлечь идентификатор элемента из URL-адреса; шаблон такой amp;R= 10031004amp;, я имею в виду, мне нужно извлечь строку из amp;R= и другого amp;

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

 preg_match('^[amp;R=]  amp;


Комментарии:

1. В вашем шаблоне отсутствуют разделители - это недопустимый шаблон.

Ответ №1:

 $url = 'http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;';
preg_match('/(amp;|?)R=([0-9] )/i', $url, $matches);
echo $matches[2];
 

В отличие от других ответов, это также будет соответствовать, если параметру R предшествует a ? вместо a amp; . Если вы знаете больше о длине числа, вы можете заменить after [0-9] на {min,max} .

Это регулярное выражение должно быть довольно надежным и соответствовать всем этим:

Ответ №2:

Используйте это:

 preg_match('/amp;R=(.*?)amp;/i', "http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;", $matches);
echo $matches[1]; // will echo 10031004
 

Комментарии:

1. @middus Я ответил на вопрос OP, который просит получить строку между amp;R= и amp; , поэтому не было необходимости выполнять регулярное выражение для других строк.

2. Да, я знаю. Но URL-адрес, указанный OP, вероятно, будет недействительным.

Ответ №3:

 preg_match('#R=([0-9] )#is', "http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;", $matches);
echo $matches[1]; # 10031004
 

Комментарии:

1. Я не знал об # этом раньше. Спасибо.

2. @middus, это может быть практически все, что угодно, если Delimiter must not be alphanumeric or backslash выполняется. Попробуйте ~ или даже * , например.

Ответ №4:

ну, прежде всего, может быть, я смогу упростить вашу задачу,

это URL-адрес из скрипта?

затем вам следует проверить содержимое $_GET, где вы найдете переменную R с содержимым 10031004...

 $item_id = $_GET['R']; 
echo $item_id; 
 

Комментарии:

1. Я думаю, что он очищает веб-сайт 🙂

Ответ №5:

 if (preg_match('/(?<=amp;R=).*?(?=amp;)/', "http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;", $regs)) {
    $result = $regs[0];
}
 

Используйте это.

Комментарии:

1. почему простые вещи выглядят сложными? 🙂

2. 🙂 Зачем захватывать то, что не нужно? 🙂

Ответ №6:

С таким же успехом я мог бы бросить вам еще один. Это будет соответствовать любому символу между R=, предшествующим ? или amp; и заканчивающийся на amp; или #.

 preg_match('/[?amp;]R=([^amp;#] )/', "http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;", $matches);
 

Комментарии:

1. Если идентификатор должен быть числовым, это не добавляет значения.

2. Да, но в его вопросе говорится, что он должен "извлечь строку из amp;R= и другого amp;", поэтому мой ответ более точный.

3. Ваш ответ будет соответствовать http://www.lapdirecciondemario.com/items.phpamp;R=1003/IamtheWalrus/1004amp; , что, вероятно, не то, что он хочет, или нет?

4. Ваше регулярное выражение возвращает 1003. Мой возвращает '1003/IamtheWalrus / 1004'. Мое более правильное, исходя из формулировки вопроса. С другой стороны, этот ввод абсурден и вряд ли будет полезен для lapdirecciondemario.com значение слова R.

5. Нет "более правильного", просто правильного и неправильного. Если мы предполагаем, что идентификатор числовой, этот URL-адрес не должен совпадать. Если бы мы знали больше об идентификаторе, мы могли бы указать {min,max} (см. Мой Ответ), чтобы в дальнейшем избежать ложных срабатываний.

Ответ №7:

 $url = "http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;";
$urlQueryParts = array();
parse_str(parse_url($url, PHP_URL_QUERY), $urlQueryParts);
if(isset($urlQueryParts[ "R" ]))
    $urlQueryParts[ "R" ];
 

Я не смог его протестировать, но он должен работать.

,
"http://www.lapdirecciondemario.com/items.phpamp;R=10031004amp;", $matches);
$host = $matches[0];

echo $host;

Комментарии:

1. В вашем шаблоне отсутствуют разделители — это недопустимый шаблон.

Ответ №1:


В отличие от других ответов, это также будет соответствовать, если параметру R предшествует a ? вместо a amp; . Если вы знаете больше о длине числа, вы можете заменить after [0-9] на {min,max} .

Это регулярное выражение должно быть довольно надежным и соответствовать всем этим:

Ответ №2:

Используйте это:


Комментарии:

1. @middus Я ответил на вопрос OP, который просит получить строку между amp;R= и amp; , поэтому не было необходимости выполнять регулярное выражение для других строк.

2. Да, я знаю. Но URL-адрес, указанный OP, вероятно, будет недействительным.

Ответ №3:


Комментарии:

1. Я не знал об # этом раньше. Спасибо.

2. @middus, это может быть практически все, что угодно, если Delimiter must not be alphanumeric or backslash выполняется. Попробуйте ~ или даже * , например.

Ответ №4:

ну, прежде всего, может быть, я смогу упростить вашу задачу,

это URL-адрес из скрипта?

затем вам следует проверить содержимое $_GET, где вы найдете переменную R с содержимым 10031004…


Комментарии:

1. Я думаю, что он очищает веб-сайт 🙂

Ответ №5:


Используйте это.

Комментарии:

1. почему простые вещи выглядят сложными? 🙂

2. 🙂 Зачем захватывать то, что не нужно? 🙂

Ответ №6:

С таким же успехом я мог бы бросить вам еще один. Это будет соответствовать любому символу между R=, предшествующим ? или amp; и заканчивающийся на amp; или #.


Комментарии:

1. Если идентификатор должен быть числовым, это не добавляет значения.

2. Да, но в его вопросе говорится, что он должен «извлечь строку из amp;R= и другого amp;», поэтому мой ответ более точный.

3. Ваш ответ будет соответствовать http://www.lapdirecciondemario.com/items.phpamp;R=1003/IamtheWalrus/1004amp; , что, вероятно, не то, что он хочет, или нет?

4. Ваше регулярное выражение возвращает 1003. Мой возвращает ‘1003/IamtheWalrus / 1004’. Мое более правильное, исходя из формулировки вопроса. С другой стороны, этот ввод абсурден и вряд ли будет полезен для lapdirecciondemario.com значение слова R.

5. Нет «более правильного», просто правильного и неправильного. Если мы предполагаем, что идентификатор числовой, этот URL-адрес не должен совпадать. Если бы мы знали больше об идентификаторе, мы могли бы указать {min,max} (см. Мой Ответ), чтобы в дальнейшем избежать ложных срабатываний.

Ответ №7:


Я не смог его протестировать, но он должен работать.