Это будет работать и очень гибко. Все, что для этого требуется, это чтобы атрибут 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
)
)