Использование PHP и Regex для извлечения идентификатора кнопки Paypal - PullRequest
3 голосов
/ 25 февраля 2011

У меня есть следующий HTML-код 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="DJ445KDUWP402">
<input type="image" src="https://www.paypal.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.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Используя PHP и регулярные выражения, кто-нибудь может сказать мне, как я могу получить только часть значения ввода "hosted_button_id"?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011
preg_match('~<input type="hidden" name="hosted_button_id" value="([0-9-A-Z]*?)">~', $html, $matches)
$matches[1]; //contains ID

должен сделать трюк

0 голосов
/ 25 февраля 2011

Это будет работать и очень гибко. Все, что для этого требуется, это чтобы атрибут value появился после атрибута name в элементе hosted_button_id Модификаторы s и m позволят вам сопоставить несколько строк. Таким образом, вы можете сопоставить всю HTML-страницу, а не только элемент hosted_button_id.

$str = '<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="DJ445KDUWP402">
<input type="image" src="https://www.paypal.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.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>';

preg_match('/name="hosted_button_id".*?value="(.*?)".*?>/ims', $str, $matches);

Выходные данные, как и ожидалось:

Array
(
    [0] => name="hosted_button_id" value="DJ445KDUWP402">
    [1] => DJ445KDUWP402
)

Вы можете сделать этот подход еще на шаг вперед и сопоставить имена всех входных элементов и их значения.

preg_match_all('/<input .*?name="(.*?)" .*?value="(.*?)".*?>/ims', $str, $matches);
print_r($matches); 

Выходы:

Array
(
    [0] => Array
        (
            [0] => <input type="hidden" name="cmd" value="_s-xclick">
            [1] => <input type="hidden" name="hosted_button_id" value="DJ445KDUWP402">
        )
    [1] => Array
        (
            [0] => cmd
            [1] => hosted_button_id
        )
    [2] => Array
        (
            [0] => _s-xclick
            [1] => DJ445KDUWP402
        )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...