#php #preg-replace #preg-match
#php #preg-replace #preg-совпадение
Вопрос:
Это далеко, но я экспериментировал как с preg_match, так и с preg_replace, пытаясь сделать что-то чрезвычайно сложное.
Я пытаюсь взять ВЕСЬ код кнопки PayPal и извлечь только 13-значный идентификационный номер кнопки. Я успешно использовал preg_replace, чтобы удалить все ненужные символы и представить код в виде одной строки беспорядочного беспорядка. К сожалению, я также извлек знаки равенства, которые, как я предполагаю, мне понадобятся для извлечения значения = из этой недавно сгенерированной строки.
Вторая проблема, с которой я сталкиваюсь, заключается в том, что даже если я могу оставить знаки равенства в созданной мной строке, в форме кнопки paypal есть два значения. Теперь мне как-то нужно игнорировать первое значение и использовать только второе, которое является нужным мне идентификатором.
Единственная причина, по которой я это делаю, заключается в том, что у PayPal, похоже, нет способа скопировать только этот идентификатор кнопки. Вместо этого он генерирует код для всей формы, и когда вы нажимаете на него, он автоматически выделяет весь код формы, не позволяя вам просто выделить небольшую часть, которую вы хотите. Я должен сделать это, чтобы кому-то, кто не понимает код, было проще скопировать код формы, вставить его в поле формы и заставить веб-сайт автоматически захватить этот идентификационный номер, а затем использовать его в другом написанном мной скрипте.
Пока у меня есть это:
<?php
$string = '';
$res = preg_replace("/[^a-zA-Z0-9]/", "", $string);
echo $res;
?>
Когда я добавляю код формы PayPal в строку вверху, которая выглядит следующим образом:
<form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="D3DPV3Y2WSA4J">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_cart_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
Я получаю это:
formtargetpaypalactionhttpswwwpaypalcomcgibinwebscrmethodpostinputtypehiddennamecmdvaluesxclickinputtypehiddennamehostedbuttonidvalueD3DPV3Y2WSA4JinputtypeimagesrchttpswwwpaypalobjectscomenUSibtnbtncartLGgifborder0namesubmitaltPayPalThesafereasierwaytopayonlineimgaltborder0srchttpswwwpaypalobjectscomenUSiscrpixelgifwidth1height1form
И, конечно, единственное, что мне нужно от этого, это второе значение: D3DPV3Y2WSA4J
Я чувствую, что мог бы провести еще немного исследований и выяснить, как оставить знаки равенства, чтобы все значения выглядели так: value= но я действительно не уверен, что смогу пропустить первое значение и захватить только второе.
Для меня это отличный опыт обучения, поскольку я не часто использую подобный код, но хотел бы получить больше знаний. Всем, кто это читает, большое спасибо за ваше время!
Ответ №1:
Вероятно, лучшим решением будет использовать библиотеку DOM-анализатора, такую как Simple DOM Parser. Но вы можете сделать:
preg_match('/name="hosted_button_id"s*value="(w )"/', $string, $match);
$button_id = $match[1];
Комментарии:
1. В этом случае я использую $button_id для echo?
2. Вы можете делать с ним все, что захотите
$button_id
. Если вы хотите повторить это, сделайте это.
Ответ №2:
Хороший ответ от Barmar. Другое решение, использующее preg_replace()
что-то вроде:
$res = preg_replace('~(. )(name="hosted_button_id"s value=")([^"] )(["]. )~s', '$3', $string);
echo $res;
Комментарии:
1. Это абсолютно блестяще! Вы оба гении!