2011-07-13 34 views
0

我需要用PHP預浸模式有助於提取從以下數據內容:什麼應該是這個數據的最佳優化preg模式?正則表達式需要幫助

<div class="box"> 
<div> 
<a href="/;s=-w3NKGFjkswdkjbg0B;detail=person;id=937382/me"> 
<b>Smith, Johnny</b> 
</a> 
</div> 
<div> 
<a href="/;s=-w3NKGFjkswdkjbg0B/http%3aservice.myxyz.net/ch/cgi/g.fcgi/me/new?CUSTOMERNO=836327973&amp;t=i373u.1310541179.a1ecb28b&amp;[email protected]">[email protected]</a> 
</div> 
<div> 
<a href="/;s=-w3NKGFjkswdkjbg0B;edit=person;id=937382/me"><img src="/;m=is;f=gif89a;h=18;k=sdakjdk12eksack;w=18/it%3amfitmcsfe19/DiEDzr48XbZcjfyGLMKnzw.gif" alt="" width="18" height="18"> 
</a> 
<a href="/;s=-w3NKGFjkswdkjbg0B;delete=person;id=937382/me"> 
<img src="/;m=is;f=gif89a;h=18;k=Dk3k-kVox-ads9Lopt-yBQ;w=18/it%3amfitmcsfe19/tHJTBPhousrElDf1x5aPvA.gif" alt="" width="18" height="18"> 
</a> 
</div> 

<div class="fitMlModuleLinec8fe6cf8">&nbsp;</div> 

<div> 
<a href="/;s=-w3NKGFjk4jkedkds8g0B;detail=person;id=327843287/me"></a> 
</div> 
<div> 
<a href="/;s=-w3NKGFjk4jkedkds8g0B/http%3aservice.myxyz.net/ch/cgi/g.fcgi/me/new?CUSTOMERNO=98324826438&amp;t=de13929382.1310541179.a1ecb28b&amp;[email protected]">[email protected]</a> 
</div> 
<div> 
<a href="/;s=-w3NKGFjk4jkedkds8g0B;edit=person;id=327843287/me"> 
<img src="/;m=is;f=gif89a;h=18;k=cBoj9wS5Yp5345435EREg;w=18/it%3amfitmcsfe19/DiEDzr48XbZcjfyGLMKnzw.gif" alt="" width="18" height="18"></a> | 
<a href="/;s=-w3NKGFjk4jkedkds8g0B;delete=person;id=327843287/me"> 
<img src="/;m=is;f=gif89a;h=18;k=Dk3k-kVox-ads9Lopt-yBQ;w=18/it%3amfitmcsfe19/tHJTBPhousrElDf1x5aPvA.gif" alt="" width="18" height="18"></a> 
</div> 

<div class="fitMlModuleLinec8fe6cf8">&nbsp;</div> 

<div> 
<a href="/;s=-w3NKGsndqw21g0B;detail=person;id=83467836/me"> 
<b>Parker</b> 
</a> 
</div> 
<div> 
<a href="/;s=-w3NKGsndqw21g0B;edit=person;id=83467836/me"> 
<img src="/;m=is;f=gif89a;h=18;k=cBodejksa23KNKvUEREg;w=18/it%3amfitmcsfe19/DiEDzr48XbZcjfyGLMKnzw.gif" alt="" width="18" height="18"></a> | 
<a href="/;s=-w3NKGF6hSNhymOcg6uWbg0B;delete=person;id=83467836/me"> 
<img src="/;m=is;f=gif89a;h=18;k=Dk3k-kVox-ads9Lopt-yBQ;w=18/it%3amfitmcsfe19/tHJTBPhousrElDf1x5aPvA.gif" alt="" width="18" height="18"></a> 
</div> 

<div class="fitMlModuleLinec8fe6cf8">&nbsp;</div> 
</div> 
</div> 

以上數據是這樣的: http://i56.tinypic.com/t867ih.jpg

的條件如下:

  • 我想提取電子郵件地址。
  • 如果找到電子郵件地址,則檢查名稱..如果找到名稱,則 獲取該電子郵件地址的人員姓名。
  • 如果找到名字並且沒有指定該人的電子郵件地址 則丟棄數據。

輸出數組應該是這樣的:

Array(
[email#1]= array([name]='name'), 
[email#2]= array([name]='name') 
. 
. 
[email#n]= array([name]='name') 
) 

結果從上面的數據應該是這樣的:

Array(
[[email protected]]= array([name]='Smith, Johnny'), 
[[email protected]]= array([name]='') 
) 

請給我建議對上述問題的最優化preg_match

+0

您無法可靠地使用正則表達式解析HTML。他們不能勝任這項任務。只要HTML從你的期望改變,你的代碼就會被破壞。有關如何使用PHP模塊正確解析HTML的示例,請參閱http://htmlparsing.com/php.html。 –

回答

0

我在調查數據質量方面的一些假設,但你可以

preg_match("/<a href=\".+?\">([^<]+)@([^<]+)</a>", "[email protected]", $matches); 
// $matches[1]='smithjonny' 
// $matches[2]='gmail.com' 

這是一個有點粗糙,但如果你能保證href不包含"(應excaped到&quot;),那麼它會提取電子郵件。

+0

Nop兄弟..謝謝你的回答,但它不是我的問題的解決方案..這將需要更多的操作來加入該電子郵件,然後獲取名稱字段(如果存在)該條目.. – Vin