Php 复杂预匹配

Php 复杂预匹配,php,preg-replace,preg-match,Php,Preg Replace,Preg Match,这是一个遥远的目标,但我一直在尝试preg_match和preg_replace,试图做一些极其复杂的事情 我试图采取整个贝宝按钮代码和提取只有13位的按钮id号。我已经成功地使用preg_replace将所有不需要的字符取出,并将代码暴露为一行混乱的代码。不幸的是,我也提取了等号,我假设我需要从这个新生成的字符串中提取一个value= 我面临的第二个问题是,即使我可以在我创建的字符串中留下等号,paypal按钮形式中也有两个值。现在,我需要忽略第一个值,只获取第二个值,这是我需要的id 我这样

这是一个遥远的目标,但我一直在尝试preg_match和preg_replace,试图做一些极其复杂的事情

我试图采取整个贝宝按钮代码和提取只有13位的按钮id号。我已经成功地使用preg_replace将所有不需要的字符取出,并将代码暴露为一行混乱的代码。不幸的是,我也提取了等号,我假设我需要从这个新生成的字符串中提取一个value=

我面临的第二个问题是,即使我可以在我创建的字符串中留下等号,paypal按钮形式中也有两个值。现在,我需要忽略第一个值,只获取第二个值,这是我需要的id

我这样做的唯一原因是,PayPal似乎没有办法只复制按钮id。相反,它会为整个表单生成代码,当您单击它时,它会自动高亮显示整个表单代码,而不允许您只高亮显示所需的小部分。我必须这样做,使不懂代码的人更容易复制表单代码,粘贴到表单字段中,让网站自动获取id号,然后在我编写的另一个脚本中使用它

到目前为止,我有:

<?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>

我明白了: FormTargetPayPalactionHttpSWWWPayPalComCgibinWebSCRMethodPostInputType HiddenNameCmdValuesX单击InputType HiddenNameHostedButtonIdValued3DPV3Y2WSA4JINPUTTypeImagesHttpSWWWPayPalObjectsMenusBtnbCartlgGifBorder0NameSubmitalPayPal安全可在线支付订单0 HttpWWPayPalObjects使用RpixelGifWidth1Height1表单

当然,我唯一需要的是第二个值:D3DPV3Y2WSA4J

我觉得我可以做更多的研究,找出如何保留等号,这样我的值看起来都像:value= 但我真的不确定我是否能够跳过第一个值而只获取第二个值


这对我来说是一次很好的学习经历——因为我不经常使用这样的代码,但我希望获得更多的知识。任何读到这篇文章的人,非常感谢您抽出时间

最好的解决方案可能是使用类似于简单DOM解析器的DOM解析器库。但你可以做到:

preg_match('/name="hosted_button_id"\s*value="(\w+)"/', $string, $match);
$button_id = $match[1];

巴尔马的回答很好。另一种使用
preg_replace()
的解决方案如下:

$res = preg_replace('~(.+)(name="hosted_button_id"\s+value=")([^"]+)(["].+)~s', '$3', $string);
echo $res;

在这个例子中,我是否使用$button\u id作为回音?您可以使用
$button\u id
做任何您想做的事情。如果你想回应它,那就这么做。那绝对是太棒了!你们都是天才!