2014-06-27 246 views
0

這是一個遙遠的範圍,但我一直在嘗試preg_match和preg_replace,努力做一些非常複雜的事情。PHP複雜preg_match

我想取一個完整的PayPal按鈕代碼,只提取13位數的按鈕id號。我已經成功地使用了preg_replace來獲取所有不需要的字符,並將代碼暴露爲混亂的一行。不幸的是,我也提取了等號 - 我認爲我需要從這個新生成的字符串中提取一個值=。

我面對的第二個問題是即使我可以在我創建的字符串中留下等號,但在PayPal按鈕表單中有兩個值。現在,我不知何故需要忽略第一個值,只抓住第二個是我需要的id。

我這樣做的唯一原因是因爲PayPal似乎沒有辦法複製該按鈕ID。相反,它會生成整個表單的代碼,當您點擊它時,它會自動突出顯示整個表單代碼,而不會讓您突出顯示所需的小部分。我必須這樣做才能讓不懂代碼的人複製表單代碼,將其粘貼到表單字段並讓網站自動獲取該ID號,然後在我編寫的另一個腳本中使用它。

到目前爲止,我有這樣的:

<?php 
$string = ''; 
$res = preg_replace("/[^a-zA-Z0-9]/", "", $string); 
echo $res; 
?> 

當我的貝寶形式的代碼添加到字符串的頂部 - 這看起來是這樣的:

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

我得到這個: formtargetpaypalactionhttpswwwpaypalcomcgibinwebscrmethodpostinputtypehiddennamecmdvaluesxclickinputtypehiddennamehostedbuttonidvalueD3DPV3Y2WSA4JinputtypeimagesrchttpswwwpaypalobjectscomenUSibtnbtncartLGgifborder0namesubmitaltPayPalThesafereasierwaytopayonlineimgaltborder0srchttpswwwpaypalobjec tscomenUSiscrpixelgifwidth1height1form

和當然,我從唯一需要的是第二個值:D3DPV3Y2WSA4J

我覺得我可以做一些更多的研究,並找出如何離開的,所以我有等號值都是這樣的:value = 但我真的不確定我能跳過第一個值,只抓住第二個值。

這對我來說都是一種很好的學習體驗 - 因爲我不經常使用這樣的代碼,但很想獲得更多的知識。任何人讀這個,非常感謝你的時間!

回答

1

最好的解決方案可能是使用DOM解析器庫,如Simple DOM Parser。但你可以這樣做:

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

在這一個,我使用$ button_id回聲? – David

+0

你可以用'$ button_id'做任何你想做的事情。如果你想回應它,那就這樣做。 – Barmar

0

Barmar很好的回答。使用preg_replace()的另一個解決方案應該是這樣的:

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

那真是太棒了!你們都是天才! – David