它的影响范围很广,但我一直在试验preg_match和preg_replace,以便做一些非常复杂的事情。
我正在尝试使用整个PayPal按钮代码并仅提取13位数的按钮ID号。我已成功使用preg_replace来获取所有不需要的字符,并将代码公开为混乱的混乱。不幸的是我也提取了等号 - 我假设我需要从这个新生成的字符串中提取一个值=。
我面临的第二个问题,即使我可以在我创建的字符串中留下等号,也有两个以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>
我明白了: formtargetpaypalactionhttpswwwpaypalcomcgibinwebscrmethodpostinputtypehiddennamecmdvaluesxclickinputtypehiddennamehostedbuttonidvalueD3DPV3Y2WSA4JinputtypeimagesrchttpswwwpaypalobjectscomenUSibtnbtncartLGgifborder0namesubmitaltPayPalThesafereasierwaytopayonlineimgaltborder0srchttpswwwpaypalobjectscomenUSiscrpixelgifwidth1height1form
当然,我唯一需要的就是第二个值:D3DPV3Y2WSA4J
我觉得我可以做更多的研究并弄清楚如何留下等号,所以我的值看起来像:value = 但是我真的不确定我能跳过第一个值而只抓第二个值。
这对我来说是一次很棒的学习经历 - 因为我不经常使用这样的代码,但是希望获得更多的知识。读过这篇文章的人,非常感谢你的时间!
答案 0 :(得分:1)
最好的解决方案可能是使用像DOM DOM Parser这样的DOM解析器库。但你可以这样做:
preg_match('/name="hosted_button_id"\s*value="(\w+)"/', $string, $match);
$button_id = $match[1];
答案 1 :(得分:0)
Barmar的回答很好。使用preg_replace()
的另一种解决方案是:
$res = preg_replace('~(.+)(name="hosted_button_id"\s+value=")([^"]+)(["].+)~s', '$3', $string);
echo $res;