#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}
.
Это регулярное выражение должно быть довольно надежным и соответствовать всем этим:
- http://www.lapdirecciondemario.com/items.phpamp;R=10031004
- http://www.lapdirecciondemario.com/items.php?foo=baramp;R=10031004
- http://www.lapdirecciondemario.com/items.php?R=10031004
- http://www.lapdirecciondemario.com/items.php?R=10031004amp;something=else
- http://www.lapdirecciondemario.com/items.phpamp;R=10031004#more-here
Ответ №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}
.
Это регулярное выражение должно быть довольно надежным и соответствовать всем этим:
- http://www.lapdirecciondemario.com/items.phpamp;R=10031004
- http://www.lapdirecciondemario.com/items.php?foo=baramp;R=10031004
- http://www.lapdirecciondemario.com/items.php?R=10031004
- http://www.lapdirecciondemario.com/items.php?R=10031004amp;something=else
- http://www.lapdirecciondemario.com/items.phpamp;R=10031004#more-here
Ответ №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}
(см. Мой Ответ), чтобы в дальнейшем избежать ложных срабатываний.